为什么这段代码会编译(至少在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...
}
}
答案 0 :(得分:1)
当您说a
时,对象a.s.x = 1
的任何部分都不会被修改。
对象a
将非const引用s
保存到外部对象。 a
的常量与s
引用的对象的常量无关。
类似于指向非const数据成员的指针的情况。指针本身不能通过const
引用进行变异,但它指向的东西可以。