为什么以下代码在C++中可以编译通过?
int phew = 53;
++++++++++phew ;
同样的代码在C语言中失败了,为什么?
为什么以下代码在C++中可以编译通过?
int phew = 53;
++++++++++phew ;
同样的代码在C语言中失败了,为什么?
int a=4; ++a=5;
在 C++0x 中也不会导致未定义行为,对吗? - Prasoon Saurava = ++a
不会引起未定义行为,而 a = a++
会。根据 "除非另有说明,否则单个运算符的操作数和单个表达式的子表达式的求值顺序以及副作用发生的顺序是未指定的",发生了什么? - Daniel Trebbien这是因为在C++
中,前置自增运算符返回一个lvalue
,它要求它的操作数是一个lvalue
。
++++++++++phew ;
被解释为++(++(++(++(++phew))))
然而,你的代码调用了未定义行为
,因为你试图在两个序列点之间多次修改phew
的值。
在C
中,前置自增运算符返回一个rvalue
,并要求它的操作数是一个lvalue
。因此,在C模式下,你的代码无法编译。
++++i
是有定义的,对吗? - fredoverflow