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