<分区>
在c++中,参数求值的顺序是不保证的,但是赋值表达式的左/右子表达式的顺序是保证的吗?例如
#include <iostream>
#include <map>
int main()
{
int i = 2;
std::map<int, int> map;
map[i++] = i--;
return 0;
}
左表达式i++
是否保证在右表达式i--
之前执行?
标签 c++
<分区>
在c++中,参数求值的顺序是不保证的,但是赋值表达式的左/右子表达式的顺序是保证的吗?例如
#include <iostream>
#include <map>
int main()
{
int i = 2;
std::map<int, int> map;
map[i++] = i--;
return 0;
}
左表达式i++
是否保证在右表达式i--
之前执行?
最佳答案
你问:
Is left expression i++ guaranteed to be executed before right expression i--?
不,不是。
线
map[i++] = i--;
最终可能成为
map[2] = 3;
或
map[1] = 2;
取决于首先计算赋值运算符的哪一侧。
但是,由于该行调用了未定义的行为,所以它也可能像@juanchopanza 的评论中指出的那样:
map[42] = -999;
关于c++参数评估顺序分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27803538/