我一直试图理解,当我在 C++ 中编写一个带有常量参数和该对象内部的指针变量的函数时,const 标志并不能保护底层内存免受修改。
例如,在以下位置执行以下操作是完全合法的operator=()
类的函数称为X
:
class X
{
public:
X& operator=(const X& other)
{
this->data = other.data; //(*)
return *this;
}
private:
int* data;
};
(*):这与以下内容相同:
int* some_pointer;
int* const other_pointer = some_pointer;
int* class_pointer = other_pointer;
但不等于:
const int* other_pointer;
int* class_pointer = other_pointer;
这会产生以下错误:
error: invalid conversion from 'const int*' to 'int*' [-fpermissive]
int* class_pointer = other_pointer;
^
我明白为什么other.x
正在被投射到int* const
但我不明白为什么它没有被投射到const* int
同时(这是一个const int* const
)。当我编写一个带有const
论证我的逻辑表明该论证中的任何内容都应该继承常量性,因为这应该是const
,保护底层数据不被修改。
当从外部访问指针成员时const
类的版本我认为应该合理地期望该对象的const
关键字应该保护类中的任何内容(甚至内存)不被修改。反对这一点的论点是外部内存不属于该对象,因此它也不应该有责任保护它。我对此的看法是,在这种情况下(在任何其他情况下,当它被其他地方以任何类型的访问权限访问时),我们正在从const
目的。换句话说,它让外部事物变得可见。那么不提高知名度的原因是什么const
?这不会改变代码任何其他位置的内存的可访问权限!
“当我编写带有 const 参数的函数时,我的逻辑表明该参数内的任何内容都应该继承常量,因为这应该是 const 的目的,以保护底层数据免遭修改。”
你对此说得很对,但是存储在X
- 对象点outside物体。外界不受影响X
的常量性,只是里面存储的数据X
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)