此代码是否依赖于函数调用顺序未定义的行为?

时间:2015-01-12 20:12:35

标签: c++ undefined-behavior

我必须构建一个带有3个参数的LPoint3f,这些参数是dgi.get_int32() / 100.0的结果。在Python中,我可以依赖于调用顺序:

LPoint3f(dgi.get_int32() / 100.0, dgi.get_int32() / 100.0, dgi.get_int32() / 100.0);
# values are correct

将此代码翻译为C++时,我写道:

LPoint3f pos(dgi.get_int32() / 100.0, dgi.get_int32() / 100.0, dgi.get_int32() / 100.0);
// incorrect values sometimes, correct others

然而,这有效:

x = dgi.get_int32() / 100.0;
y = dgi.get_int32() / 100.0;
z = dgi.get_int32() / 100.0;
LPoint3f pos(x, y, z);

代码#1是否未定义行为?

1 个答案:

答案 0 :(得分:3)

未指定C ++中的函数调用顺序。如果你的调用get_int32()有任何副作用,即修改一些内部值,那么你将得不到与Python相同的结果。代码未定义,但不会产生可靠的值。