关于c ++:赋值运算符的定义是否存在缺陷?

Is there a defect in the definition of the assignment operator?

在我的C++ 11标准的副本(ISO/IEC 1488∶2011(e))中,赋值运算符定义包括:

In simple assignment (=), the value of the expression replaces that of the object referred to by the left operand.

这不是说"右操作数的值"而不是"表达式的值"吗?目前,它似乎模糊不清,很容易被解释为"赋值表达式的值"。

短语"the expression"也在[expr.ass]的另一段中含糊不清地使用:

If the left operand is not of class type, the expression is implicitly converted (Clause 4) to the cv-unqualified type of the left operand

我想这里也有"右操作数"的意思,对吧?

这也是我能找到的关于赋值运算符效果的唯一定义。我错过什么了吗?


标准通常假定读者有一些常识。

例如,在某些地方,它显然混淆了对象和类的概念。

这样做是为了避免通过文本中不必要的冗余来降低可读性,这符合干燥原则:不要重复自己。


在这两种情况下,"左操作数"都是正确的:

  • 被替换的值是左操作数引用的对象。它将获得右操作数的值,但这不是第一个引号所描述的部分。
  • 将值赋给非类类型时,该值将清楚地转换为赋给对象的类型,即左操作数。