我知道k--
等于k = k - 1
。而且我想知道k = k--
发生了什么,我认为这可能会导致无限循环。但实际上,我在Visual Studio 2017中编译了此代码,并且k = k--
的输出与k = k - 1
相同。
那么k = k--
的含义是什么?
答案 0 :(得分:8)
在c++17之前,该行为是未定义的,之后,根据[expr.ass]/1可以:
[...]赋值在左右操作数的值计算之后和赋值表达式的值计算之前进行排序。 右操作数在左操作数之前排序
和之前表示根据[intro.execution]/8
[...]如果每个与表达式X相关的值计算和副作用都在与表达式Y相关的每个值计算和副作用之前被排序,则可以说表达式X在表达式Y之前被排序。 / p>
最后,保证k=k-1
和k=k--
会产生相同的结果。
另请参阅:cppreference
答案 1 :(得分:4)
在C和C ++中,C ++ 17 it is undefined behavior之前。在您的编译器上给出合理答案的事实并不能保证它会在其他编译器上,甚至在当前编译器的其他情况下也能这样做。