25

指针[ class.thisthis ] 中,C++ 标准规定:

类的this成员函数中的类型XX*

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, trueor之类的文字3.5f。-pointerthis不是变量,它更像是一个文字,它扩展为调用函数的对象的地址([class.this])。就像例如 literaltrue有 typeboolnot bool constthisis of typeX*not X*const一样。

于 2013-06-17T12:04:55.827 回答