Type de pointeur this
Le type du pointeur this peut être modifié dans la déclaration d'une fonction par les mots clés const et volatile. Pour déclarer une fonction comme ayant les attributs d'un ou plusieurs de ces mots clés, ajoutez le ou les mots clés après la liste d'arguments de la fonction.
Considérez cet exemple :
// type_of_this_pointer1.cpp
class Point
{
unsigned X() const;
};
int main()
{
}
Le code précédent déclare une fonction membre, X, dans laquelle le pointeur this est traité comme un pointeur const désignant un objet const. Des combinaisons des options cv-mod-list peuvent être utilisées, mais elles modifient toujours l'objet désigné par this et non pas le pointeur this lui-même. Par conséquent, la déclaration ci-dessous déclare la fonction X ; le pointeur this est un pointeur const désignant un objet const :
// type_of_this_pointer2.cpp
class Point
{
unsigned X() const;
};
int main()
{
}
Le type du pointeur this dans une fonction membre est décrit par la syntaxe suivante, où cv-qualifier-list est déterminé à partir du déclarateur de fonction membre et peut être const ou volatile (ou les deux), et où class-type est le nom de la classe :
[cv-qualifier-list] class-type * const this
En d'autres termes, this est toujours un pointeur const ; il ne peut pas être réassigné. Les qualificateurs const et volatile utilisés dans la déclaration de fonction membre s'appliquent à l'instance de classe désignée par this dans la portée de cette fonction.
Le tableau ci-dessous fournit davantage d'explications sur le fonctionnement de ces modificateurs.
Sémantique des modificateurs du pointeur this
Modificateur |
Signification |
---|---|
const |
Impossible de modifier les données membres ; impossible d'appeler les fonctions membres qui ne sont pas const. |
volatile |
Les données membres sont chargées à partir de la mémoire chaque fois que vous y accédez ; certaines optimisations sont désactivées. |
Il est incorrect de passer un objet const à une fonction membre qui n'est pas const. De même, il est incorrect de passer un objet volatile à une fonction membre qui n'est pas volatile.
Les fonctions membres déclarées comme const ne peuvent pas modifier les données membres (dans ces fonctions, le pointeur this désigne un objet const).
Notes
Il est impossible de déclarer des constructeurs ou des destructeurs comme const ou volatile.Ils peuvent, toutefois, être appelés sur des objets const ou volatile.