2011-05-29 112 views
4

(a = b) = k未定义的行为,如果a,b和k是int类型并正确初始化?表达式(a = b)= k UB?

谢谢

+2

此代码是否编译? – Fox32 2011-05-29 08:42:29

+1

@ Fox32:它在C++中有,是的。不在C. – 2011-05-29 08:46:31

+0

我的直觉告诉我,这将在C++ 0x中明确定义。 – fredoverflow 2011-05-29 09:01:31

回答

8

看起来UB给我。 a正在不止一次地修改两个序列点。

(a=b)结果是左值这是a

分配操作的结果的基准是存储在左操作数的分配已经发生后的值; 结果 是一个左值($ 5.17/1)。

+2

如果赋值运算符是为其用户定义的类定义的,那么它们之间应该有一个序列点,因此应该定义行为。 – Andrei 2011-05-29 08:51:43

+2

@Andrei:问题中提到的'a','b'和'k'类型为'int'。所以行为是不确定的。 – 2011-05-29 08:52:59

相关问题