C ++中涉及一元运算符的表达式求值

时间:2014-02-19 10:54:13

标签: c++ c unary-operator expression-evaluation

在这些情况下,为什么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 ++遵循什么规则呢?

1 个答案:

答案 0 :(得分:0)

具体地说,这些表达式的结果没有定义,这是因为Cs要求多次访问(不包括所有访问都是读取的情况)总是在它们之间有一个序列点(例如a;或,)。你得到的结果是有效随机的,取决于你的编译器,或者理论上甚至可以在你的程序运行之间改变,请看这里有关序列点的信息:

http://en.wikipedia.org/wiki/Sequence_point

在这里,如果你想了解未定义的行为(你滥用变量会导致什么):

http://en.wikipedia.org/wiki/Undefined_behavior#Examples_in_C_and_C.2B.2B