如果我有以下内容:
class Array{
public:
Array (int n=2) : _n(n), buf(new int[n]) {}
int & operator[](int i) const
{
return _buf[i];
}
int _n;
int* _buf;
};
int main()
{
Array arr1;
const Array arr2;
arr1[0]=1;
arr1[1]=2;
arr2[0]=arr1[0];
++arr2[0];
std:: << arr2[0]<<std::endl;
}
程序将编译并打印'2',但我有点困惑。
arr2中的const声明究竟保护了什么?
显然不是对象的内容?
请帮助我理解。
谢谢你!答案 0 :(得分:4)
C ++编译器只强制const
将保护此对象的成员,而不是间接引用的其他对象(例如通过指针)。 _buf
是一个指针成员,它指向的内容不受编译器的保护。
但是,许多类基于const
覆盖,以便也保护对相关对象的访问。要做到这一点,你要写:
int & operator[](int i) { return _buf[i]; }
const int & operator[](int i) const { return _buf[i]; }
这会将对象上的const
传播到下标元素上的const
。