想象下面的例子:
class A
{
public:
void doSomeStuff() { std::cout << "SomeStuff" << std::endl; }
};
class B
{
public:
B(A& a) : a(a) {}
void constStuff() const { a.doSomeStuff(); }
private:
A &a;
};
如果doSomeStuff()
要更改数据,那也不会产生影响class B
吗?为什么允许这种行为?
如果doSomeStuff()会更改数据,那也不会影响B类吗?
好吧,不是以编译器检查const正确性的方式。甲B
持有参考到A
。该对象可以驻留在任何位置,但最重要的是它不驻留在B
对象内部。因此,对其进行修改不会带来诸如更改const对象之类的未定义行为。我们有对非常量对象的引用,因此可以通过引用来修改对象。就对象是否物理上而言,这是C ++类型系统所关心的。
它可能会影响的逻辑状态B
,但确保类不变量成立是程序员的责任。C ++不会帮助您。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句