首页 > 解决方案 > 对复合赋值中的“const”感到困惑

问题描述

规范实现通过operator+=RHS 作为const参考:

X& operator+=(const X& rhs)

然而,在

x += x;

RHS修改。这会调用 UB 吗?

标签: c++operator-overloadinglanguage-lawyerconst-correctness

解决方案


dcl.type.cv

指向 cv 限定类型的指针或引用不需要实际指向或引用 cv 限定对象,但它被视为好像确实如此;const 限定的访问路径不能用于修改对象,即使引用的对象是非常量对象并且可以通过其他一些访问路径进行修改

引用rhs是 const 限定的,因此不能用于修改它所引用的对象。

但是,被引用的对象,即x,是非常量的,因此x可以通过其他访问路径修改其自身,例如在 的定义中operator+=

因此,此代码示例中的行为已得到很好的定义。


推荐阅读