C++ 中的"this"类型?
Type of "this" in c++?
struct Foo
{
void f()
{
// (*)
}
};
标有(*(的行中的"这个"是什么类型?
是常量 Foo* 还是 Foo* ?
n3376 9.3.2/1
在非静态 (9.3( 成员函数的主体中,关键字 this 是一个 prvalue 表达式,其值是为其调用函数的对象的地址。
成员函数中的此类型为类 X 是 X*。如果成员函数被声明为 const,则其类型为 const X*,如果成员函数被声明为易失性,其类型是易失性 X*,如果声明成员函数常量易失性,其类型是常量易失性 X*。
在f
内部,this
具有类型 Foo *
,因为f
不是const
成员函数。
不能对const Foo
对象调用f
。以下错误:
const Foo obj;
obj.f();
这是因为在Foo::f
内部,this
指针是Foo *
而不是const Foo *
,所以函数调用需要指针转换,丢弃限定符。
this
指针本身不是变量。它不可分配,但不是因为const
限定符。在范围内没有声明,例如 Foo *const this
。作为语言的规则,this
表达式根本不是左值。
this
指针与&obj
没有太大区别。
此类型取决于成员函数。
例如,对于类 X,如果成员函数是
1( 常量,则这是常量 X* 的类型
2(挥发性,那么这就是挥发性X*等
否则为 X*
>this
是指当前对象。c++中的this
类型是Foo *const
。
相关文章:
- 成员函数的"this"参数具有"const"类型,但我的函数实际上不是"const"
- 定义非静态成员时获取C++中的"this"类型
- 为什么直接传递"this"指针来存档是一个错误,而另一个相同类型的指针是可以的?
- C++ 不允许将'this'用作非类型模板参数
- 错误:候选函数不可行:'this'参数具有类型 'const' 但方法未标记为 const
- 这个函数指针的尾部返回类型为"this"合法吗
- C++集合方法:函数'setCost'不可行:'this'参数的类型'const value_type'
- JUCE - 成员函数不可行:'this'参数具有常量类型
- 如何自动更新重写方法的 *this 返回类型
- 派生类型的dynamic_cast "this":什么时候合法?
- 将"this"指针强制转换为另一种类型不违反严格锯齿?
- 是否可以更改'this'关键字的类型?
- 创建类型为 'this'/当前对象的指针
- C++中的 decltype(this) 是什么类型
- 请求“this”中的成员“mCar”,该成员属于非类类型“owner*const”
- 在成员函数尾部返回类型中使用this和属性
- C++ 中的"this"类型?
- 从派生类调用时推断'this'指针类型?
- 'this'参数具有常量类型,但函数未标记为常量
- 为什么子类的非重写实例方法中的"this"类型是父类型?