「this」ポインタの性質: 非定数か定数?
タイトルが示すように、「this」ポインタは次のとおりです。 C などのオブジェクト指向プログラミング言語のユビキタスな要素。しかし、その具体的な型は何でしょうか?
答えは使用状況に応じて 2 つあります。非 const クラス メソッド内では、「this」ポインタは単にオブジェクトの型へのポインタです。つまり、 'クラス名'。ただし、const メソッド内で使用すると、「this」ポインターは定数ポインターになります: 'const ClassName '.
定常性の根拠
この型の違いの目的は、オブジェクトの状態の定常性を強制することです。 const メソッド内では、オブジェクトの内部データは不変とみなされ、変更が禁止されます。 'this' ポインタを定数ポインタにすることで、コンパイラは、変更不可能なオブジェクトが常に const アクセス パスを通じてアクセスされるようにします。
コンパイラの特徴
'this' ポインタは理論的には const メソッド内で型 'const ClassName *' を持つ必要がありますが、一部のコンパイラは内部的な癖を示します。定数でないメソッドであっても、「this」ポインタを定数ポインタとして解釈します。この手法は、かつて GCC や MSVC などの古いコンパイラで流行していたもので、「this」ポインタの変更不可能性を保証することを目的としていました。
定数ポインタ トリックの終焉
C 11 での右辺値参照の導入により、'this' を定数ポインタとして解釈する習慣は非実用的になりました。右辺値参照は、「this」ポインター型の余分な const を検出する可能性があり、定数ポインター手法をまだ使用している環境ではコンパイル エラーが発生します。 GCC などの最新のコンパイラーはこの回避策を放棄しましたが、MSVC は現在でもその実装を継続しています。
以上が「この」ポインターは定数ですか、それとも非定数ですか: 2 つのタイプの物語の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。