AMA*_*AMA 4 c++ gcc stdmap visual-c++ language-lawyer
这段代码
#include <iostream>
#include <map>
int main()
{
std::map<int, std::size_t> m;
m[0] = m.size();
std::cout << m[0] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
1。vc++ 的结局如何0?从 C++17 开始,求值的顺序是有保证的,m.size()排在前面m[0];结果保证是0。
- 在每个简单赋值表达式 E1=E2 和每个复合赋值表达式 E1@=E2 中,E2 的每个值计算和副作用都在 E1 的每个值计算和副作用之前排序
在 C++17 之前,行为是unspecified。
顺便说一句,您可以使用Gcc C++17 mode和Gcc C++14 mode观察不同的行为。