私はこの質問C++ の長所と短所への回答を読んでいて、コメントを読んでいるときにこの疑問を抱きました。
プログラマは、"this" が参照ではなくポインタであることに混乱を覚えることがよくあります。別の混乱は、「hello」が std::string 型ではなく、char const* (ポインター) に評価される理由です (配列からポインターへの変換後)
それは、他の(後の)言語と同じ規則を使用していないことを示しているだけです。— ルドルフィエ
ただし、「これ」のことはかなり些細な問題と言えます。おっと、未定義の動作の例でいくつかのエラーを見つけてくれてありがとう。:)サイズに関する情報が最初のものと関係があるかどうかはわかりませんが。ポインターは、割り当てられたメモリの外側を指すことは単に許可されていません
これは一定のポインターですか?– yesraaj 22 12月. 082008-12-22 06:35
メソッドが const int getFoo() const の場合、これは定数になります。<- getFoo のスコープでは、「this」は定数であるため、読み取り専用です。これにより、バグが防止され、オブジェクトが変更されないという一定レベルの保証が呼び出し元に提供されます。— ダグ T. 22 12 月 2008 〜で 16:42 に
「これ」を再割り当てすることはできません。つまり、これは右辺値であるため、"this = &other;" を実行することはできません。しかし、これは T* 型であり、 T const 型ではありません。つまり、これは非定数ポインターです。const メソッドを使用している場合は、const へのポインターです。T const 。しかし、ポインター自体は非定数です — ヨハネス・シャウブ
"this" は次のように考えてください: #define this (this_ + 0) ここで、コンパイラは "this_" をオブジェクトへのポインターとして作成し、"this" をキーワードにします。(this_ + 0) は右辺値であるため、「this」を割り当てることはできません。もちろん、それはそうではありませんが(そのようなマクロはありません)、それを理解するのに役立ちます
私の質問は、なぜthis
ポインターが参照ではないのですか? それをポインタにする特定の理由はありますか?
this
参照であることが理にかなっている理由について、さらにいくつかの議論があります。
Item 1
fromを考慮してくださいMore Effective C++
:有効なオブジェクト、つまりNULLではないことが保証されている場合は参照を使用してください(私の解釈)。- さらに、参照はポインターよりも安全であると見なされます (漂遊ポインターでメモリーを台無しにすることはできないため)。
- 第 3 に、参照にアクセスするための構文 ( ) は、ポインターにアクセスするための構文 (または)
.
よりも少し適切で短いです。->
(*)