Que*_*est 7 c++ reference class constants
想象下面的例子:
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;
};
Run Code Online (Sandbox Code Playgroud)
如果doSomeStuff()要更改数据,那也不会产生影响class B吗?为什么允许这种行为?
如果doSomeStuff()会更改数据,那也不会影响B类吗?
嗯,不是以编译器检查const正确性的方式。甲B持有参考到A。该对象可以驻留在任何位置,但最重要的是它不驻留在B对象内部。因此,对其进行修改不会带来诸如更改const对象之类的未定义行为。我们有对非常量对象的引用,因此可以通过引用来修改对象。就对象是否物理上而言,这是C ++类型系统所关心的。
它可能会影响的逻辑状态B,但确保类不变量成立是程序员的责任。C ++不会帮助您。
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |