分配的c ++参数评估顺序?

时间:2015-01-06 17:02:57

标签: c++

在c ++中,不保证对顺序的参数评估,但是保证赋值表达式的左/右子表达式的顺序?例如

#include <iostream>
#include <map>

int main()
{
    int i = 2;
    std::map<int, int> map;
    map[i++] = i--;
    return 0;
}

左表达式i++是否保证在右表达式i--之前执行?

1 个答案:

答案 0 :(得分:1)

你问:

  

左表达式i ++保证在右表达式i - ?

之前执行

不,不是。

该行

map[i++] = i--;

可能最终成为

map[2] = 3;

map[1] = 2;

取决于首先评估赋值运算符的哪一侧。

然而,由于该行调用了未定义的行为,正如@juanchopanza的评论所指出的那样:

map[42] = -999;