带圆括号的复合赋值语句 C++

Multiple compound assignment statements with parentheses C++

我正在尝试通过编写一个简单的 class 来学习 C++,以获取两个双精度数的输入,一个实部和一个虚部,并对它们执行操作。我有一个特别的部分,

cout << "((c1 += c2) += c3) = " << ((c1 += c2) += c3) << endl; 
cout << "c1 = " << c1 << endl; 

在这种情况下,它正确打印了 c1、c2 和 c3 的总和,但 c1 仅更新为 c1 和 c2 的总和。我想知道为什么会这样。

(c1 += c2) 将 return c1 并将 c2 添加到 c1。然后,由于 c1 被 returned,语句变为 c1 += c3。因此,c3 被添加到 c1。按照这个逻辑,c1应该等于c1、c2、c3初始值之和。

首先在这段代码中 ((c1 += c2) += c3) 首先将执行内括号 (c1+=c2 这将给出 c1 和 c2 的总和,然后将其与 c3 (c1+c2)+=c3 会将 c3 添加到总和中。 因为 c3 被添加到 c1 和 c2 的总和而不是变量 c3。因此 c1 只有 c1 和 c2 的总和。 如果你想让 c1 也有 c1 、 c2 和 c3 的总和,那么试试这个 ((c1=(c1 += c2)) += c3)

希望你得到答案。