在c ++中,不保证对顺序的参数评估,但是保证赋值表达式的左/右子表达式的顺序?例如
#include <iostream>
#include <map>
int main()
{
int i = 2;
std::map<int, int> map;
map[i++] = i--;
return 0;
}
左表达式i++
是否保证在右表达式i--
之前执行?
答案 0 :(得分:1)
你问:
左表达式i ++保证在右表达式i - ?
之前执行
不,不是。
该行
map[i++] = i--;
可能最终成为
map[2] = 3;
或
map[1] = 2;
取决于首先评估赋值运算符的哪一侧。
然而,由于该行调用了未定义的行为,正如@juanchopanza的评论所指出的那样:
map[42] = -999;