Erreurs, bugs, questions - page 1705

 
fxsaber:
Je l'ai.
Expliquer
 
Комбинатор:
Expliquer
Vous ne pouvez pas - il y a un vide terminologique.
 
Комбинатор:
Expliquer
ce[0] ici est rvalue.
 
Sergei Vladimirov:
ici [0] est la valeur r.

C'est ce qui n'est pas clair.

Si l'affectation fonctionne dans le premier cas, elle devrait logiquement fonctionner dans le second cas également. Car dans le premier cas, la même valeur r est assignée au pointeur, mais l'opérateur fonctionne alors !

Ce n'est que mon opinion, bien sûr. Mais je veux m'en sortir.

 
Комбинатор:

C'est ce que je ne comprends pas.

Je ne le comprends pas non plus. )) Mises à jour. Je l'ai déjà.

Si l'affectation fonctionne dans le premier cas, elle devrait logiquement fonctionner dans le second cas également. C'est parce que dans le premier cas, la même valeur r est assignée au pointeur mais l'opérateur fonctionne ensuite !

Ce n'est, bien sûr, que mon opinion. Mais je veux m'en sortir.

rvalue ne peut être affecté qu'à une valeur gauchère ou être une constante temporaire.

C'est ce qui fonctionne dans les plus :

class A
{
public:
        int m[10];

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

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

Celui-ci ne le fait pas.

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:

Celui-ci ne l'est pas, et je n'arrive pas à comprendre la différence :

Si vous ajoutez un lien vers le pointeur, cela fonctionnera. Ou un double pointeur.
 
Комбинатор:
Si vous ajoutez un lien vers le pointeur, cela fonctionnera. Ou un double pointeur.
Je ne comprends pas, quel lien, où ?
 
Ugh, mec. Dans le deuxième exemple, l'opérateur[] renvoie l'adresse du i-ème élément - bien sûr, elle ne peut pas être modifiée. Stupide le soir.
 

Oups, je ralentis, le deuxième exemple n'est pas du tout correct.

C'est pourquoi il est logique que

error : invalid initialization of non-const reference of type 'int*&' from an rvalue of type 'int*' (erreur : initialisation invalide d'une référence non-const de type 'int*&' à partir d'une valeur r de type 'int*')

 
Комбинатор:

Oups, je ralentis, le deuxième exemple n'est pas du tout correct.

C'est pourquoi il est logique que

error : invalid initialization of non-const reference of type 'int*&' from an rvalue of type 'int*'.

Oui, j'en ai déjà parlé plus haut. J'ai modifié le deuxième échantillon mais cela ne fonctionne toujours pas. L'opérateur renvoie une valeur, c'est-à-dire une copie. On a dû devenir tous les trois si obtus, hein ! ))