今天我注意到'this'的类型有些奇怪.如果您有这样的事情:
class C {
void funcA() {
funcB(this);
}
void funcB(C obj) {
//do something
}
};
Run Code Online (Sandbox Code Playgroud)
你当然会得到一个错误,因为funcB()需要一个对象,而'this'是一个指针.我不小心忘记了星号,但对错误信息感到惊讶,因为它说:
no matching function for call to 'C::funcB(C* const)'
Run Code Online (Sandbox Code Playgroud)
当funcA()不是常数时,const来自何处?
那就是说this指针本身就是const- 也就是说,你不能修改指针指向不同的内存.
早在非常 C++的早期历史,之前,你可以过载new和delete,或放置新的发明,this是一个非const指针(至少在构造函数中).想要处理自己的内存管理的类通过在构造函数中为实例分配空间,并this在退出构造函数之前写入该内存的地址来实现.
在const成员函数中,您要处理的类型将是Class const *const this,指的是this指向的是什么const(以及指针本身const).
C* const并不意味着类型的对象C是不变的.那将是C const*或const C*.
C* const 表示指针本身是常量.
这是有道理的,因为你做不到
this = &something_else;
Run Code Online (Sandbox Code Playgroud)