c ++中==运算符的相关性

use*_*223 4 c++ associative

我在c ++中有这段代码:

std::vector<int> v1;
std::vector<int> v2;
...
if (v1.insert(v1.end(), v2.begin(), v2.end()) == v1.end())
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

首先评估哪个表达式?调试时,首先评估"=="运算符的右侧,这是正确的行为吗?

Rei*_*ica 12

这与关联性无关(在表达式中起作用a == b == c).您要问的是操作员操作数的评估顺序.通过一些明确列出的异常,这在C++中是故意未指定的.这意味着无法保证是否ab将首先评估a == b.

例外(保证评估顺序)是:

  • 函数调用的所有参数都在函数调用之前进行求值(但是以未指定的顺序).
  • 所述的左手侧内置运营商||&&首先计算(和右手侧仅在必要时进行评价).
  • 在的左侧内置运营商,是右侧前评估.
  • ?:在结果之前评估运算符中的条件,并且仅评估其中一个结果.

注意的特殊性质&&,||以及,停止在这些符重载,来适用.这正是为什么超载这三个运营商是个主意的原因.

  • @BM我正在努力扩大答案,我希望现在已经涵盖了. (3认同)