La nature du pointeur 'this' : non-const ou constant ?
Comme le titre l'indique, le pointeur 'this' est un élément omniprésent dans les langages de programmation orientés objet comme C . Mais quel est son type spécifique ?
La réponse est double, selon le contexte d'utilisation : à l'intérieur d'une méthode de classe non const, le pointeur 'this' est simplement un pointeur vers le type de l'objet, c'est-à-dire ' Nom de classe '. Cependant, lorsqu'il est utilisé dans une méthode const, le pointeur 'this' devient un pointeur constant : 'const ClassName '.
La justification de la constance
Le Le but de cette différence de type est de renforcer la constance de l'état de l'objet. Au sein d'une méthode const, les données internes de l'objet sont considérées comme immuables, empêchant toute modification. En faisant du pointeur 'this' un pointeur constant, le compilateur garantit que l'objet non modifiable est toujours accessible via un chemin d'accès constant. le pointeur 'this' devrait théoriquement avoir le type 'const ClassName *' dans une méthode const, certains compilateurs présentent une bizarrerie interne. Ils interprètent le pointeur « this » comme un pointeur constant, même dans les méthodes non constantes. Cette pratique, autrefois répandue dans les compilateurs plus anciens comme GCC et MSVC, visait à garantir la non-modifiabilité du pointeur 'this'.
La disparition de l'astuce du pointeur constant
Avec l'introduction des références rvalue en C 11, la pratique consistant à interpréter « ceci » comme un pointeur constant est devenue peu pratique. Les références Rvalue peuvent détecter la const supplémentaire sur le type de pointeur « this », conduisant à des erreurs de compilation dans les environnements qui utilisent encore la technique du pointeur constant. Les compilateurs modernes comme GCC ont abandonné cette solution de contournement, tandis que MSVC persiste dans sa mise en œuvre encore aujourd'hui.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!