【发布时间】:2011-11-15 11:13:57
【问题描述】:
今天我发现这样的代码有效。这对我来说听起来很奇怪,因为据我所知,你不能从 const 成员函数中修改任何成员。你实际上不能直接这样做,但你可以调用非常量成员函数。如果将成员函数标记为 const 表示传递给函数的这个指针指向的是 const 对象,那么下面的例子中如何调用非 const 成员函数?
#include <iostream>
class X
{
public:
void foo() const
{
ptr->bar();
}
void bar() {}
private:
X * ptr;
};
int main()
{
}
【问题讨论】:
-
改变变量的代码在哪里——你的代码什么都不做
-
糟糕!抱歉 :) 这是 const 指针,我不修改指针本身,我修改了这个指针下的对象。无论如何,谢谢。这对我疲惫的大脑来说太长了:)
-
我在这里看不到 const ???
-
我可以在 VS2008 中重现这个。在我的理解中, foo() 的实现不应该编译,因为 const 成员调用了非常量成员。我已修改代码以禁止修改成员,并在 X 的 const 实例上调用 foo,没有错误消息。 (/W4)
-
@peterchen:编译器是正确的。 constness 在这种情况下不是传递性的,即 X* ptr;将是 Xconst ptr,而不是 X constconst ptr;
标签: c++ function constants member