gpt4 book ai didi

c++ - 一旦对象声明为 const c++,什么是 protected

转载 作者:行者123 更新时间:2023-11-30 02:05:56 24 4
gpt4 key购买 nike

如果我有以下内容:

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 声明到底保护了什么?

显然不是对象的内容?

请帮助我理解。

谢谢!

最佳答案

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

但是,许多类基于 const 进行重写,以保护对关联对象的访问。为此,您需要编写:

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

这会将对象上的 const 传播到下标元素上的 const

关于c++ - 一旦对象声明为 const c++,什么是 protected ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9242563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com