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



我必须构建一个带有 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相同的结果。代码不是未定义的,但它不会产生可靠的值。

最新更新