Errori, bug, domande - pagina 1705

 
fxsaber:
Stupido. Può dirmi perché non può farlo?
Capito.
 
fxsaber:
Capito.
Spiegare
 
Комбинатор:
Spiegare
Non si può - c'è una lacuna terminologica.
 
Комбинатор:
Spiegare
questo[0] qui è rvalue.
 
Sergei Vladimirov:
qui[0] è rvalue.

Questo è ciò che non è chiaro.

Se l'assegnazione funziona nel primo caso, logicamente dovrebbe funzionare anche nel secondo caso. Perché nel primo caso lo stesso rvalue è assegnato al puntatore, ma l'operatore funziona!

Questa è solo la mia opinione, naturalmente. Ma io voglio uscirne.

 
Комбинатор:

È questo che non capisco.

Non lo capisco nemmeno io. )) Aggiornamento, l'ho già preso.

Se l'assegnazione funziona nel primo caso, dovrebbe logicamente funzionare anche nel secondo. Questo perché nel primo caso, lo stesso rvalue è assegnato al puntatore ma l'operatore funziona dopo!

Questa è, ovviamente, solo la mia opinione. Ma io voglio uscirne.

rvalue può essere assegnato solo a un valore di sinistra o essere una costante temporanea.

Questo è ciò che funziona nei plus:

class A
{
public:
        int m[10];

        int& operator [] (const int i)
        {
                return((m[i]));
        }
};

int main()
{
        A oA;
        oA[2] = 5;
}

Questo non lo fa.

class A
{
public:
        int* m[10];

        int* operator [] (const int i)
        {
                return((m[i]));
        }
};

int main()
{
        A oA;
        oA[2] = new int;    // error C2106: =: левый операнд должен быть левосторонним значением
}
 
Sergei Vladimirov:

Questo non lo è e non riesco a capire la differenza:

Se aggiungete un link al puntatore, funzionerà. O un doppio puntatore.
 
Комбинатор:
Se aggiungete un link al puntatore, funzionerà. O un doppio puntatore.
Non capisco, quale link, dove?
 
Ugh, amico. Nel secondo esempio l'operatore[] restituisce l'indirizzo dell'elemento i-esimo - ovviamente, non può essere cambiato. Stupido la sera.
 

Ops, sto rallentando, il secondo esempio non è affatto corretto.

Ecco perché è logico che

errore: inizializzazione non valida di un riferimento non-const di tipo 'int*&' da un rvalue di tipo 'int*'