【发布时间】:2011-12-19 03:23:24
【问题描述】:
我很惊讶在“const”中发现了这个“漏洞”:
#include <stdio.h>
class A
{
int r ;
public:
A():r(0){}
void nonconst()
{
puts( "I am in ur nonconst method" ) ;
r++;
}
} ;
class B
{
A a ;
A* aPtr ;
public:
B(){ aPtr = new A() ; }
void go() const
{
//a.nonconst() ; // illegal
aPtr->nonconst() ; //legal
}
} ;
int main()
{
B b ;
b.go() ;
}
所以基本上从const 方法B::go(),如果A 类型的对象被指针引用,您可以调用非const 成员函数(恰当地命名为nonconst())。
这是为什么呢?似乎是一个问题(它在我的代码中,我在其中找到它。)
【问题讨论】:
-
这是相当出乎意料的。我在 Mac 上通过 g++ 4.2.1 运行它,并编译了代码(令我惊讶的是)。我很想知道这个问题的答案。
-
这种行为在您第一次偶然发现时通常会令人惊讶。前段时间,我问this question 是否有将常量传播到指针对象的解决方案。
标签: c++ pointers constants const-correctness