ホームページ  >  記事  >  バックエンド開発  >  「この」ポインターは定数ですか、それとも非定数ですか: 2 つのタイプの物語

「この」ポインターは定数ですか、それとも非定数ですか: 2 つのタイプの物語

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-09 15:11:02189ブラウズ

Is the 'this' Pointer Const or Non-const: A Tale of Two Types?

「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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。