在const引用对象

时间:2018-02-15 22:05:05

标签: c++ const

为什么这段代码会编译(至少在MSVC和Clang上)?我希望我不能在const对象上做任何改变,但它看起来像是包含的,引用的对象在它里面是非const的吗?

class SomeObject {
public:
    int x;
};
class ContainerA {
public:
    SomeObject& s;
    int x;
public:
    ContainerA(SomeObject& s): s(s) {}
};
class ContainerB {
public:
    ContainerB(ContainerA const& a) {
        a.s.x = 1; // Const a but non-const a.s?
        //a.x = 1; // This fails as I expected...
    }
}

1 个答案:

答案 0 :(得分:1)

当您说a时,对象a.s.x = 1的任何部分都不会被修改。

对象a将非const引用s保存到外部对象。 a的常量与s引用的对象的常量无关。

类似于指向非const数据成员的指针的情况。指针本身不能通过const引用进行变异,但它指向的东西可以。