'this' ポインタの型分析
C では、'this' ポインタは、次の現在のインスタンスを指す特別なポインタです。クラス。その型は、それが使用されるコンテキストに基づいて決定されます。
メンバー関数の 'this' ポインターの型
非 const メンバー関数内では、型は「this」の は、単にクラス名に * を付けたものです。たとえば、ClassName という名前のクラスでは、その非 const メソッド内の 'this' の型は ClassName *.
Const メンバー関数の 'this' ポインターの型
const メンバー関数内で使用すると、「this」ポインターは定数オブジェクトへのポインターになります。その型はこれを反映し、const ClassName * になります。これにより、「this」ポインタを介してオブジェクトを変更できなくなります。「this」ポインタを定数にする理由
「this」を作成する主な理由const メンバー関数のポインター定数は、クラスの const の正確性を強制します。 「this」ポインターによるオブジェクトの変更を防止することで、オブジェクトが変更されないことが保証されます。これは、クラス データの整合性を維持し、偶発的な変更を防ぐのに役立ちます。解釈エラー
「this」ポインタの型が ClassName * const this であるという観察Windows で VC 2008 を使用するのは正しくありません。 「this」ポインターは左辺値ではないため、アスタリスク (*) の右側に const 修飾子を適用することはできません。非 const メンバー関数の 'this' の正しい型は ClassName * です。内部実装の詳細
これまで、一部のコンパイラは実装の詳細を使用していました。ここで、非 const メンバー関数であっても、「this」ポインターを定数ポインターとして解釈しました。ただし、これは C 言語仕様に準拠していないため、GCC を含むほとんどのコンパイラーで放棄されました。C 11 の右辺値参照に関する注意
C 11 での右辺値参照の導入により、依然として上記のトリックを使用している実装によって 'this' ポインタに追加された余分な定数を検出できるようになりました。これにより、右辺値参照を操作するときにエラーが発生する可能性があるため、この手法は非推奨になりました。以上がC の「this」ポインタの正しい型は何ですか: 定数性と実装の問題?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。