2013-04-02 21 views
1

我有这行代码可以在C表达式++改变一个变量值

next_step_camera_x_rotation=step_camera_x_rotation+delta_x; 

,我想知道如果step_camera_x_rotationdelta_x值被改变

+2

他们*可*是。取决于类型以及如何实现'operator +'过载。 – chris

+3

只有当'+'或'='运算符已被重载为任何类型。除了'next_step_camera_x_rotation'之外,默认的运算符不会改变任何值。 – Dave

+0

@Dave,忘了'operator ='。接得好。 – chris

回答

1

表达可以改变一个变量的值:

v = (a=3) + 3; 

但一个,你必须在这个问题上的右侧是不会改变的参数值

v = a + b; 

无论a也不b会被这个表达改变了。

5

通常,不应 ,但这并不意味着它不会。这实际上取决于对象的类型以及如何实现operator+operator=。如果它是一个理智的实现,它不应该修改任何参数,但是在语言中没有规定来保证这一点。

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

+0

+1直接切割C++的悲伤,粘性内脏。 :) –

1

如果它们是volatile变量,则step_camera_x_rotationdelta_x的值可以在内部更改它们的值。

+1

一个有趣的考虑。 – chris

+1

这有点偏离......'volatile'用于标记固定到硬件位置的变量,并可能由于外部原因而改变该值。 *但是,这并不意味着如果你标记一个变量volatile,它可能会改变它的值,这种关系反而是相反的:如果它可以通过程序以外的方式改变它的值,它必须被标记'volatile'。 –

+0

我只是告诫OP要注意可以改变它们值的volatile变量,即使它们不在赋值操作符的左边。 – Deepu

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 

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

相关问题