我必须构建一个带有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是否未定义行为?
答案 0 :(得分:3)
未指定C ++中的函数调用顺序。如果你的调用get_int32()有任何副作用,即修改一些内部值,那么你将得不到与Python相同的结果。代码未定义,但不会产生可靠的值。