我有这行代码
next_step_camera_x_rotation=step_camera_x_rotation+delta_x;
我想知道step_camera_x_rotation
或delta_x
的价值是否被改变了
答案 0 :(得分:5)
一般来说,不应该,但这并不意味着它不会。这实际上取决于对象的类型以及operator+
和operator=
的实现方式。如果它是一个理智的实现,它不应该修改任何一个参数,但语言中没有规则来保证。
如果类型是基本类型,那么答案是添加不会更改参数。
答案 1 :(得分:1)
step_camera_x_rotation
和delta_x
的值如果是volatile
个变量,可以在内部更改其值。
答案 2 :(得分:1)
表达式可以改变变量的值:
v = (a=3) + 3;
但是你在问题中的那个不会改变右侧的参数值
v = a + b;
此表达式不会更改a
或b
。
答案 3 :(得分:0)
由于我们在这里处理病态情况,如果一侧的值是对另一侧的值的引用,则等式右侧的值可能会改变。
E.g。如果您已声明:
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
使用预处理器可以实现类似的效果。