gpt4 book ai didi

c++ - 类型为 "Class* const"的“this”,即使方法不是 const

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:29 26 4
gpt4 key购买 nike

今天我注意到“this”的类型有些奇怪。如果你有这样的事情:

class C {
void funcA() {
funcB(this);
}

void funcB(C obj) {
//do something
}
};

您当然会遇到错误,因为 funcB() 需要一个对象,而“this”是一个指针。我不小心忘记了星号,但对错误消息感到惊讶,因为它说:

no matching function for call to 'C::funcB(C* const)'

当 funcA() 不是常数时,const 从何而来?

最佳答案

也就是说,this 指针本身const —— 也就是说,您不能修改指针以指向不同的内存。

回到 C++ 的非常早期历史,在您可以重载 newdelete 之前,或者发明放置 new 之前, this 是一个非常量指针(至少在构造函数内部)。想要处理自己的内存管理的类通过在构造函数中为实例分配空间,并在退出构造函数之前将该内存的地址写入 this 来实现。

在 const 成员函数中,您要处理的类型是 Class const *const this,这意味着 this 指向的是 const(以及指针本身是 const)。

关于c++ - 类型为 "Class* const"的“this”,即使方法不是 const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14383724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com