我在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++中是故意未指定的.这意味着无法保证是否a或b将首先评估a == b.
例外(保证评估顺序)是:
||和&&首先计算(和右手侧仅在必要时进行评价).,是右侧前评估.?:在结果之前评估运算符中的条件,并且仅评估其中一个结果.注意的特殊性质&&,||以及,停止在这些符重载,来适用.这正是为什么超载这三个运营商是个坏主意的原因.