25

The thispointer [ class.this ] で、C++ 標準は次のように述べています。

thisクラスのメンバ関数のの型Xは ですX*

すなわちthisありませんconst。しかし、なぜそれはそれである

struct M {
    M() { this = new M; }
};

与える

error: invalid lvalue in assignment  <-- gcc
'=' : left operand must be l-value   <-- VC++
'=' : left operand must be l-value   <-- clang++
'=' : left operand must be l-value   <-- ICC
(source: some online compiler frontends)

言い換えれば、そうでthisはありませんconstが、実際にはそうです!

4

1 に答える 1

45

this同じ段落で、prvalue(「純粋な右辺値」)であるとも言及されているためです。

純粋な右辺値の標準で言及されている例は、参照を返さない関数を呼び出した結果、または のような1リテラルtrueです3.5f。-pointerthisは変数ではなく、関数が呼び出されるオブジェクトのアドレス([class.this]) に展開されるリテラルに似ています。そして、例えばリテラルtrueには型があっboolない bool constthis型があっX*ない X*constのと同じように。

于 2013-06-17T12:04:55.827 に答える