Комбинатор: Alors pourquoi la première pièce de l'exemple de fxsaber fonctionne-t-elle ?
Pourquoi ne le ferait-il pas ? Il a une expression this[0] qui renvoie un pointeur. Voici la même chose sous une forme différente :
int a;
int* Func(int& i)
{
return(&i);
}
int* p = Func(a); // работает, то же что A* a = this[0]
Func(a) = newint; // не работает, то же, что и this[0] = new int
Le problème est que le pointeur (descripteur) de rvalue se transforme en quelque sorte en lvalue après avoir été affecté à une variable. C'est un peu fou...
Комбинатор: Le problème est que le pointeur (descripteur) de rvalue se transforme en quelque sorte en lvalue après avoir été affecté à une variable. C'est un peu fou...
Oui, c'est moi qui suis confus. Après
A* a = this[0];
a = new A; // так работает
L'expression
CheckPointer(this[0]) == POINTER_INVALID
sera vrai. Ce qui est parfaitement logique.
Les développeurs doivent formuler la raison pour laquelle c'est impossible de manière claire et agréable.
Je ne comprends toujours pas le dernier exemple. La surcharge de l'opérateur "=" dans la classe A transforme cette [0] de rvalue en lvalue... Je n'arrive pas à comprendre comment. S'agit-il d'une fonctionnalité de la MCL ? Il n'y a pas de tel comportement chez les pros.fxsaber, comment êtes-vous arrivé à cette construction ? Je veux dire surcharge = en A. Ou par essais et erreurs ?
Комбинатор: Le pointeur se voit attribuer rvalue, qui est ensuite écrasé par le nouveau A.
Où ? Ici ?
this[0] = new A ;
Ici, l'opérateur[] renvoie la valeur contenue dans la cellule Data[0]. Il ne s'agit pas d'une référence à cette cellule ou d'un pointeur vers celle-ci, mais simplementd'une copie de la valeur contenue dans cette cellule, c'est-à-dire rvalue. Rien ne peut être attribué à cette copie, bien sûr. Je ne comprends pas en quoi operator= change cela.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Il fallait qu'on soit tous les trois si bêtes, hein ! ))
Alors pourquoi la première pièce de l'exemple de fxsaber fonctionne-t-elle ?
Pourquoi ne le ferait-il pas ? Il a une expression this[0] qui renvoie un pointeur. Voici la même chose sous une forme différente :
ce[0] est la valeur r ici.
Résultat Le problème est un non-sens. Malheureusement, le vocabulaire est rare pour l'expliquer.
fxsaber:
Точно не так
Результат
Le problème est une certaine inutilité
Malheureusement, le vocabulaire est rare pour l'explication.OK, je n'ai pas envie de réfléchir. Déjà fatigué.
Le problème est que le pointeur (descripteur) de rvalue se transforme en quelque sorte en lvalue après avoir été affecté à une variable. C'est un peu fou...
L'expression
sera vrai. Ce qui est parfaitement logique.
Les développeurs doivent formuler la raison pour laquelle c'est impossible de manière claire et agréable.
Oui, j'ai fait une erreur.
En bref, tout va bien :)
Le pointeur se voit attribuer rvalue, qui est ensuite écrasé par le nouveau A.
Où ? Ici ?
this[0] = new A ;
Ici, l'opérateur[] renvoie la valeur contenue dans la cellule Data[0]. Il ne s'agit pas d'une référence à cette cellule ou d'un pointeur vers celle-ci, mais simplement d'une copie de la valeur contenue dans cette cellule, c'est-à-dire rvalue. Rien ne peut être attribué à cette copie, bien sûr. Je ne comprends pas en quoi operator= change cela.