通过引用const函数来调用另一个类的非const函数

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吗?为什么允许这种行为?

Sto*_*ica 5

如果doSomeStuff()会更改数据,那也不会影响B类吗?

嗯,不是以编译器检查const正确性的方式。甲B持有参考A。该对象可以驻留在任何位置,但最重要的是它不驻留在B对象内部。因此,对其进行修改不会带来诸如更改const对象之类的未定义行为。我们有对非常量对象的引用,因此可以通过引用来修改对象。就对象是否物理上而言,这是C ++类型系统所关心的。

它可能会影响的逻辑状态B,但确保类不变量成立是程序员的责任。C ++不会帮助您。

  • @SombreroChicken-仅当与`A`闲逛时 (2认同)