如果要为变量分配新值并检查新值是否与旧值相同,则倾向于避免使用临时变量。我可以做这样的事情:

if (oldval == (oldval = new_value()))
{
 ... do something
}


这种行为是定义明确的,还是评估优先级语言或编译器依赖于此?我可以尝试这样做并查看结果,但是不能保证它也可以在其他系统上运行。我是用C++编写的,所以这是我最感兴趣的语言,但是如果行为与其他语言一致(或不一致),我想知道。

谢谢!

最佳答案

未定义==操作数的求值顺序(我假设==未重载)。无法保证oldval将首先评估还是oldval = new_value()将首先评估。在这种情况下,行为为未定义

避免编写这样的表达式来访问变量的值,并且还要在表达式的其他位置修改该变量。

注意:只有运算符,&&||?:保证操作数求值从左到右进行。因此,存在sequence point:

10-08 11:07