私はこの質問C ++の賛否両論の回答を読んでいて、コメントを読んでいるときにこの疑問を感じました。
プログラマは、「これ」がポインタであり、参照ではないことを混乱させることがよくあります。"hello"がstd :: string型ではないが、char const *(ポインター)に評価される理由は別の混乱です(配列からポインターへの変換後)– Johannes Schaub-litb Dec 22 '08 at 22:56
これは、他の(後の)言語と同じ規則を使用していないことを示しています。– le dorfier 2008年12月22日3:35
私は「これ」のものをかなり些細な問題と呼びます。そして、おっと、私の未定義の動作の例でいくつかのエラーをキャッチしてくれてありがとう。:)私はサイズに関する情報が最初のもので何と関係があるのか理解していませんが。ポインターは、割り当てられたメモリの外を指すことは許可されていません。
これは絶え間ないpoinerですか?– yesraaj 2008年12月22日6:35
メソッドがconst int getFoo()constの場合、これは定数にすることができます。<-getFooのスコープでは、「this」は定数なので、読み取り専用です。これにより、バグが防止され、オブジェクトが変更されないことがある程度保証されます。– Doug T. Dec 22 '08 at 16:42
「これ」を再割り当てすることはできません。つまり、これは右辺値であるため、「this =&other;」を実行できません。これはタイプT *であり、タイプT constではありません。つまり、それは非定数ポインターです。constメソッドを使用している場合は、constへのポインタです。T const。しかし、ポインタ自体は非定数です– Johannes Schaub-litb '08 / 12/22 17:53
「this」は次のように考えてください。#define this(this_ + 0)は、コンパイラが「this_」をオブジェクトへのポインタとして作成し、「this」をキーワードにします。(this_ + 0)は右辺値なので、「this」を割り当てることはできません。もちろん、それはそうではありません(そのようなマクロはありません)が、それを理解するのに役立ちます– Johannes Schaub-litb 12月22日08:17:55
私の質問は、this
ポインタが参照ではないのはなぜですか?ポインタにする特別な理由はありますか?
this
参照であることはなぜ意味があるのか、いくつかのさらなる議論:
Item 1
から検討するMore Effective C++
:有効なオブジェクト、つまりNULLではないことが保証されているときに参照を使用してください(私の解釈)- さらに、参照はポインタよりも安全であると見なされます(メモリを誤ったポインタでねじ込むことができないため)。
- 第3に、参照(
.
)にアクセスするための構文は、ポインタ(->
または(*)
)にアクセスするよりも少し優れており、短くなっています。
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const { return this == NULL ? NULL : m_hWnd; }
this
常に評価されるとは限りませんtrue
か?