如果要为变量分配新值并检查新值是否与旧值相同,则倾向于避免使用临时变量。我可以做这样的事情:
if (oldval == (oldval = new_value()))
{
... do something
}
?
这种行为是定义明确的,还是评估优先级语言或编译器依赖于此?我可以尝试这样做并查看结果,但是不能保证它也可以在其他系统上运行。我是用C++编写的,所以这是我最感兴趣的语言,但是如果行为与其他语言一致(或不一致),我想知道。
谢谢!
最佳答案
未定义==
操作数的求值顺序(我假设==
未重载)。无法保证oldval
将首先评估还是oldval = new_value()
将首先评估。在这种情况下,行为为未定义。
避免编写这样的表达式来访问变量的值,并且还要在表达式的其他位置修改该变量。
注意:只有运算符,
,&&
,||
和?:
保证操作数求值从左到右进行。因此,存在sequence point: