在这些情况下,为什么 C/C++ 不按从左到右的顺序计算表达式:最初 x=1
Evaluating x + ++x gives 4.
如果执行正常评估(++ 的优先级高于 +),则结果应为 1 + 2 = 3
相似地:
x + ++x + x gives 6
x + x + ++x gives 4
为什么结果不同?
更多案例:
x + x++ +x gives 5
C/C++ 遵循什么规则呢?
在这些情况下,为什么 C/C++ 不按从左到右的顺序计算表达式:最初 x=1
Evaluating x + ++x gives 4.
如果执行正常评估(++ 的优先级高于 +),则结果应为 1 + 2 = 3
相似地:
x + ++x + x gives 6
x + x + ++x gives 4
为什么结果不同?
更多案例:
x + x++ +x gives 5
C/C++ 遵循什么规则呢?
具体来说,这些表达式的结果没有定义,这是因为 Cs 要求多次访问(不包括所有访问都是读取的情况)在它们之间总是有一个序列点(例如 a ; 或 ,)。您得到的结果实际上是随机的,并且取决于您的编译器,或者理论上甚至可能在您的程序运行之间发生变化,请参阅此处以获取有关序列点的信息:
http://en.wikipedia.org/wiki/Sequence_point
在这里,如果您想了解未定义的行为(您滥用变量的原因):
http://en.wikipedia.org/wiki/Undefined_behavior#Examples_in_C_and_C.2B.2B