2012-02-11 56 views
1

,如果我有以下几点:什么是受保护的,一旦一个对象声明为const C++

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

这是因为你没有缩进你的代码。 – 2012-02-11 18:13:37

回答

4

C++编译器只强制const将保护此对象的成员,而不是其他对象的间接引用(例如通过指针)。 _buf是一个指针成员,它指向的内容不受编译器的保护。

但是,许多类基于const进行覆盖以保护对关联对象的访问。要做到这一点,你会写:

int & operator[](int i) { return _buf[i]; } 
const int & operator[](int i) const { return _buf[i]; } 

这个对象const下标的元素上传播const

相关问题