adresse de cette
J'essaie de trouver l'adresse de this
pointeur, mais ce code est montrant une étrange
erreur:
#include <iostream>
using namespace std;
class Base
{
public:
void test()
{
void *address_of_this =&this;
cout<<address_of_this<<endl;
}
};
int main()
{ Base k;
k.test();
return 0;
} //error non-lvalue in unary'&'
Pouvez-vous expliquer cette erreur ?
Également point que ce qui est illégal en prenant l'adresse de this
?
Essayez d'ajouter un espace après le signe =
OriginalL'auteur T.J. | 2012-02-02
Vous devez vous connecter pour publier un commentaire.
this
est un pointeur contenant l'adresse de l'actuel "objet". Ce n'est pas une variable qui est stocké quelque part (ou peut-être même changé), c'est un mot-clé spécial avec ces propriétés.En tant que tel, la prise de son adresse n'a pas de sens. Si vous voulez connaître l'adresse de l'actuel "objet", vous pouvez simplement sortie:
ou magasin
Dans standardese:
this
est une rvalue (et non pas de type de classe), donc il n'a pas une adresse.Dans Standardese de nouveau,
this
est prvalue - pure-rvalue.OriginalL'auteur PlasmaHH
Citant l'2003 C++ standard:
Pour le dire simplement,
&
nécessite une lvalue.this
est une rvalue, pas une lvalue, tout comme le message d'erreur indique.OriginalL'auteur Robᵩ
this
se réfère à la actuel objet en utilisant son adresse.Dans votre problème, il existe deux erreurs:
this
est pas un lvalue.La
&
implique un lvalue. lvalues sont ceux qui apparaissent sur le côté gauche d'une affectation (variables, tableaux, etc.).Alors que
this
est un rvalue. rvalues, ne peut pas apparaître sur le côté gauche (addition, soustraction, etc.).Référence: C++ Références Rvalue Expliqué.
Un caché erreur que je voudrais également mentionner est donc:
address_of_this
est en train de recevoir une adresse d'une adresse.Fondamentalement,
&this
est traduit en quelque chose comme&&object
ou&(&object)
.Fondamentalement, pensez à
this
comme&object
(mais souvenez-vous seulement parce qu'il n'est pas vrai).OriginalL'auteur Edwin Pratt