赋值运算符的定义是否存在缺陷?

时间:2012-12-21 00:27:45

标签: c++ c++11 standards variable-assignment

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

  

在简单赋值(=)中,表达式的值将替换左操作数引用的对象的值。

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

在[expr.ass]的另一段中,“表达式”一词也含糊不清:

  

如果左操作数不是类类型,则表达式被隐式转换(第4节)到左操作数的cv-unqualified类型

我认为这也意味着“正确的操作数”,对吧?

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

2 个答案:

答案 0 :(得分:4)

标准通常假设读者有一些常识

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

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

答案 1 :(得分:3)

“左操作数”在两种情况下都是正确的:

  1. 要替换的值是左操作数引用的对象。它将获得正确操作数的值,但这不是第一个引用所描述的内容的一部分。
  2. 将值分配给非类类型时,该值会明确转换为指定给对象的类型,即左操作数。