Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中==运算符的结合性+;_C++_Associative - Fatal编程技术网

C++ c+中==运算符的结合性+;

C++ c+中==运算符的结合性+;,c++,associative,C++,Associative,我有一段c++代码: std::vector<int> v1; std::vector<int> v2; ... if (v1.insert(v1.end(), v2.begin(), v2.end()) == v1.end()) { return 0; } std::vector v1; std::向量v2; ... if(v1.insert(v1.end(),v2.begin(),v2.end())==v1.end()) { 返回0; } 将首先计算哪个表

我有一段c++代码:

std::vector<int> v1;
std::vector<int> v2;
...
if (v1.insert(v1.end(), v2.begin(), v2.end()) == v1.end())
{
    return 0;
}
std::vector v1;
std::向量v2;
...
if(v1.insert(v1.end(),v2.begin(),v2.end())==v1.end())
{
返回0;
}

将首先计算哪个表达式?调试时,首先计算“==”运算符的右侧,这是正确的行为吗?

这与关联性无关(在
a==b==c等表达式中起作用)。您要问的是运算符操作数的求值顺序。使用一些显式列出的异常,这是C++中有意未指定的。这意味着不能保证
a
b
将首先在
a==b
中求值

例外情况(保证评估顺序)为:

  • 函数调用的所有参数都在函数调用本身之前求值(但顺序未明)
  • 首先计算内置运算符
    |
    &&
    的左侧(仅在必要时计算右侧)
  • 内置运算符
,的左侧在右侧之前计算
  • 运算符
    ?:
    中的条件在结果之前求值,并且只求值一个结果

  • 请注意,
    &&
    |
    的特殊属性在重载这些运算符时停止应用。这正是为什么重载这三个操作符是一个坏主意的原因。

    您不是在要求
    操作符==
    的关联性,而是关于。这个操作符的求值顺序是未指定的,所以你必须假设这个顺序总是不适合你的。为了安全起见,将语句分成两行。

    有帮助吗?这是未定义的行为。除了一些特殊的运算符(&&、| |、逗号、:)之外,标准没有定义操作数的求值顺序。你的意思是不确定吗?@πνταῥεῖ 是的,很好。@πάνταῥεῖ: 您要查找的单词是“unspecified”(不要与“undeterminatevalues”(不确定值)混淆)。应该注意的是,这些异常非常重要,请参阅@BM我正在努力扩展答案,我希望现在就涵盖它。