1

我有这行代码

next_step_camera_x_rotation=step_camera_x_rotation+delta_x;

我想知道 or 的值是否step_camera_x_rotationdelta_x改变了

4

4 回答 4

5

一般来说,它不应该,但这并不意味着它不会。这实际上取决于对象的类型以及实现方式operator+operator=实现方式。如果它是一个健全的实现,它不应该修改任何一个参数,但是语言中没有规则可以保证这一点。

如果类型是基本类型,那么答案是添加不会改变参数。

于 2013-04-02T01:23:25.797 回答
1

如果它们是变量,则step_camera_x_rotation和的值可以在内部更改它们的值。delta_xvolatile

于 2013-04-02T01:24:40.637 回答
1

表达式可以改变变量的值:

v = (a=3) + 3;

但是您在问题中拥有的那个不会改变右侧参数的值

v = a + b;

这个表达式既a不会也b不会改变。

于 2013-04-02T01:24:43.140 回答
0

由于我们在这里处理的是病理情况,因此如果一侧的值是对另一侧的值的引用,则等式右侧的值可能会发生变化。

例如,如果您已声明:

int step_camera_x_rotation = 1;
int delta_x = 2;
int &next_step_camera_x_rotation = delta_x;  // you'd be crazy to do this
next_step_camera_x_rotation=step_camera_x_rotation+delta_x; // delta_x just changed

您可以使用预处理器实现类似的效果。

于 2013-04-02T03:05:18.280 回答