今天我发现那样的代码可行。这对我来说听起来很奇怪,因为据我所知,你无法修改const成员函数中的任何成员。你实际上不能直接做,但你可以调用非const成员函数。如果将成员函数标记为const表示传递给函数的指针指向const对象,那么如何在示例下调用非const成员函数?
#include <iostream>
class X
{
public:
void foo() const
{
ptr->bar();
}
void bar() {}
private:
X * ptr;
};
int main()
{
}
答案 0 :(得分:12)
您的成员变量不是X
,而是指向X
的指针。只要foo
不修改指针,它就可以是const
。
答案 1 :(得分:4)
当你有一个指针成员时,指针在const方法中是const。您将无法更改存储在指针中的地址。但你可以随心所欲地改变指针。
这是
之间的区别X* const cannot_change_pointer; //this is how top-level const applies to pointers
const X* cannot_change_pointee;
更有意思的是,由于同样的原因,方法上的const对引用成员没有任何影响(const方法只会阻止你引用引用无论如何都无法通过引用完成的其他内容)
答案 2 :(得分:0)
这似乎完全没问题。对foo的调用不会修改ptr成员。因此,foo的常量得到尊重。
我的2美分