我知道这已经被问了很多,但我能找到的唯一答案是当使用 (int*) 或类似方法实际抛弃 const-ness 时。当不涉及强制转换时,为什么 const 限定符不适用于 const 对象上的指针类型成员变量?
#include <iostream>
class bar {
public:
void doit() { std::cout << " bar::doit() non-const\n"; }
void doit() const { std::cout << " bar::doit() const\n"; }
};
class foo {
bar* mybar1;
bar mybar2;
public:
foo() : mybar1(new bar) {}
void doit() const {
std::cout << "foo::doit() const\n";
std::cout << " calling mybar1->doit()\n";
mybar1->doit(); // This calls bar::doit() instead of bar::doit() const
std::cout << " calling mybar2.doit()\n";
mybar2.doit(); // This calls bar::doit() const correctly
}
// ... (proper copying elided for brevity)
};
int main(void)
{
const foo foobar; // NOTE: foobar is const
foobar.doit();
}
上面的代码产生以下输出(在 gcc 4.5.2 和 vc100 中测试):
foo::doit() 常量 调用 mybar1->doit() bar::doit() 非常量 <-- 为什么? 调用 mybar2.doit() bar::doit() 常量