赋值运算符,相同的语句

时间:2014-03-26 00:33:45

标签: c++ variable-assignment assignment-operator

这是一个愚蠢的问题,但我很难过。以下两个C ++语句是否相同?

regWages = regPay + overTime;
regPay + overTime = regWages;

3 个答案:

答案 0 :(得分:4)

没有。一个是有效的,另一个不是。 (也许。*)

您通常只能分配给 lvalues ,这些是同义词,您可以指定的内容。算术表达式的结果通常不是您可以分配的内容。

更简单:a = 1 + 2没问题,但1 + 2 = a不是。您可以为a提供一个值,但不能为整数添加值提供结果。

C ++中的赋值是一种状态变化。它与“方程式”的数学概念非常不同。 C ++中的赋值更像是数学中的定义,但与数学不同,您可以将值重新分配给现有对象。

*)运算符重载会使图像稍微复杂化。

答案 1 :(得分:0)

要解决您的疑问,您应该了解ome导入概念:Lvalues and Rvalues

在您的代码中,regWages = regPay + overTime;是正确的,因为如果变量regWages是Lvalues,则它是非临时对象,您可以执行=操作。

regPay + overTime = regWages;错误,因为regPay + overTime的结果是Rvalues,只是一个临时变量,你无法进行=操作。

答案 2 :(得分:0)

这很有趣,但两个运算符都可以有效,具体取决于对象的类型定义。

regWages = regPay + overTime;
regPay + overTime = regWages;

但从语义上讲它们是不同的,赋值运算符不是对称的。