c++中的求值顺序

Order of Evaluation in c++

本文关键字:顺序 c++      更新时间:2023-10-16

我刚刚开始学习c++,所以不确定计算的顺序。在下面的代码段中,正如您可以看到的,在计算C时改变计算顺序会给我不同的结果,当我计算C*(line-i)/i时,它给我-131213633,当我计算它为(line-i)/i *C时,它给我145422675。我理解在第一种情况下,这是一个溢出问题,但我想了解评估的顺序。

C = C * (line - i) / i ;
(gdb) p line
$1 = 31
(gdb) p i
$2 = 15
(gdb) p C
$3 = 145422675
(gdb) p C * (line - i) / i
$4 = -131213633
(gdb) p (line - i) / i * C
$5 = 145422675

*/都在左边,所以表达式从左到右求值。

C * (line - i)(即C * 16)溢出
(line - i) / i1, 1 * C不溢出

cout<< 3/2 *2; // Prints 2
cout<< 2*3/2;  // Prints 3

在第一行中,3/2的计算结果为1.5,即整数1。然后乘以2得到2。

在第二行中,首先进行乘法运算,2*3的结果是6,再除以2得到3。

所以当整数和双精度运算混合时,求值顺序很重要