Errores, fallos, preguntas - página 1705

 
fxsaber:
Estúpido. ¿Puede decirme por qué no puede hacerlo?
Lo tengo.
 
fxsaber:
Lo tengo.
Explique
 
Комбинатор:
Explique
No funcionará: hay un vacío terminológico.
 
Комбинатор:
Explique
este[0] aquí es rvalue.
 
Sergei Vladimirov:
aquí[0] es rvalue.

Esto es lo que no está claro.

Si la asignación funciona en el primer caso, lógicamente debería funcionar también en el segundo. Porque en el primer caso se asigna el mismo valor r al puntero, ¡pero el operador entonces funciona!

Esto es sólo mi opinión, por supuesto. Pero quiero hacerlo.

 
Комбинатор:

Eso es lo que no entiendo.

Yo tampoco lo entiendo. )) Actualización. Ya lo tengo.

Si la asignación funciona en el primer caso, lógicamente debería funcionar también en el segundo. Eso es porque en el primer caso, el mismo valor r se asigna al puntero pero el operador funciona después.

Esto es, por supuesto, sólo mi opinión. Pero quiero hacerlo.

rvalue sólo puede asignarse a un valor de la izquierda o ser una constante temporal.

Esto es lo que funciona en los pluses:

class A
{
public:
        int m[10];

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

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

Este no lo hace.

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:

Este no lo es, y no puedo entender la diferencia:

Si añades un enlace al puntero funcionará. O un doble puntero.
 
Комбинатор:
Si añades un enlace al puntero funcionará. O un doble puntero.
No entiendo, ¿qué enlace, dónde?
 
Ugh, hombre. En el segundo ejemplo el operador[] devuelve la dirección del elemento i-ésimo - por supuesto, no se puede cambiar. Estúpido por la noche.
 

Uy, me estoy frenando, el segundo ejemplo no es del todo correcto.

Por eso es lógico que

error: inicialización inválida de una referencia no-const de tipo 'int*&' desde un rvalue de tipo 'int*'