Erros, bugs, perguntas - página 1705

 
fxsaber:
Estúpido. Pode dizer-me porque não pode fazer isso?
Já está.
 
fxsaber:
Já está.
Explicar
 
Комбинатор:
Explicar
Não se pode - há uma lacuna terminológica.
 
Комбинатор:
Explicar
isto[0] aqui é valor.
 
Sergei Vladimirov:
aqui[0] é o valor.

Isto é o que não é claro.

Se a atribuição funcionar no primeiro caso, logicamente deve funcionar também no segundo caso. Porque no primeiro caso o mesmo valor é atribuído ao ponteiro, mas o operador então funciona!

Esta é apenas a minha opinião, é claro. Mas eu quero sair.

 
Комбинатор:

Isso é o que não compreendo.

Eu também não o compreendo. )) Actualização já está disponível.

Se a atribuição funcionar no primeiro caso, deve logicamente funcionar também no segundo. Isto porque no primeiro caso, o mesmo valor é atribuído ao ponteiro mas o operador trabalha depois disso!

Esta é, evidentemente, apenas a minha opinião. Mas eu quero sair.

O valor só pode ser atribuído a um valor canhoto ou ser uma constante temporária.

Isto é o que funciona nos prós:

class A
{
public:
        int m[10];

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

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

Este não o faz.

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 não é, e eu não consigo perceber a diferença:

Se acrescentar uma ligação ao ponteiro, funcionará. Ou um ponteiro duplo.
 
Комбинатор:
Se acrescentar uma ligação ao ponteiro, funcionará. Ou um ponteiro duplo.
Não percebo, que ligação, onde?
 
Ugh, meu. No segundo exemplo, o operador[] devolve o endereço do i-ésimo elemento - claro, não pode ser alterado. Estúpido à noite.
 

Oops, estou a abrandar, o segundo exemplo não está de todo certo.

É por isso que é lógico que

erro: inicialização inválida de referência não constante do tipo 'int*&' a partir de um valor do tipo 'int*'.