【发布时间】:2014-02-21 15:23:12
【问题描述】:
假设我有一个类 Foo,它有一个返回非常量引用的成员函数,它本身运行一个使用 const this 指针的成员函数:
class Foo{
public:
Foo& display(std::ostream& os) { do_display(os); return *this; }
private:
void do_display(std::ostream& os) const { os << contents; }
std::string contents;
}
当display 运行do_display 时,this 指针被隐式转换为指向 const 的指针。那么,为什么当do_display 终止时,display 仍然能够更改它被调用的对象?据我所知,通常不可能将指向 const 的指针分配给指向非 const 的指针。任何见解都值得赞赏。
【问题讨论】:
-
你可以把它想象成一个参数。如果它为一个函数添加了
const,则不会影响调用者。 -
只有
do_display不能更改对象。display可以。这里没有魔法,因为this作为第一个(隐藏)参数传递。 -
非 const 方法可以很好地更改对象,即使它们调用 const 方法。方法就像另一个带有隐藏“第一个”参数的函数。
-
你通过值传递一个参数(指针的那个)所以你可以做任何你想做的事情
-
谢谢,这是有道理的。我不确定“this”是隐式参数还是隐式返回的东西。
标签: c++ function pointers constants this