【发布时间】:2014-01-13 01:25:49
【问题描述】:
class Test
{
public:
Test() : i(0), ptr(&i) {}
int i;
int *ptr;
void change_const (int x) const { *ptr=x; }
};
int main()
{
const Test obj;
obj.ptr = &obj.i; // error
obj.change_const(99);
return 0;
}
虽然obj中的ptr是int *const类型,但构造函数可以让他指向i类型const int。明确尝试这样做当然会失败。为什么构造函数会提供这个关于 const 正确性的漏洞?其他非直接明显的漏洞,如
int *ptr;
const int **c_ptr = &ptr; // error
const int c = 10;
*c_ptr = &c;
*ptr = 20; // because here change of c possible
也是经过深思熟虑的预防。
【问题讨论】:
-
C++ 有时会给你足够的绳索让你上吊。只是不要一开始就写狗的代码并按规则玩
标签: c++ class pointers const-correctness