我正在阅读Scott Meyers的《 Effective C++》,在第11篇中,我描述了自赋值编写器的陷阱,它使用以下代码
class Bitmap { ... };
class Widget {
...
private:
Bitmap *pb; // ptr to a heap-allocated object
};
Widget&
Widget::operator=(const Widget& rhs) // unsafe impl. of operator=
{
delete pb; // stop using current bitmap
pb = new Bitmap(*rhs.pb); // start using a copy of rhs’s bitmap
return *this; // see Item 10
}
因此,当调用者的位图指针和重载的参数reference(rhs)都指向相同的内存位置时,rhs将被更新,即使它是方法中的const引用。为什么编译器允许它?
最佳答案
仅保证您不能通过参数rhs
修改对象。编译器无法阻止您修改其他路由。例如
int a = 0;
const int& ra = a; // a can't be changed via ra
a = 42; // but the original object is still modifiable
关于c++ - 当对象引用为常数时,为什么允许更改指向另一个类的指针的成员变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49525453/