关于undefined behaviors of evaluation order.
一楼是不可能喂熊的。
正题
本人一直都搞不懂为什么Cpp/C会出现undefined behaviors of evaluation order这么鸡肋的问题。
更为剧毒的是,ISO每出一次新标准就会对其中的一些进行well-define,或是做出修改。
举证:
> '''
i = i++ + 1; // undefined behavior (until C++17)
i = ++i + 1; // undefined behavior (until C++11)
++ ++i; // undefined behavior (until C++11)
f(++i, ++i); // undefined behavior (until C++17)
//然后这个在Cpp17是变成了unspecified behavior
f(i = -1, i = -1); // undefined behavior (until C++17)
cout << i << i++; // undefined behavior (until C++17)
a[i] = i++; // undefined behavior (until C++17)
'''
所以现在的问题是
- 为什么会出现undefined behaviors of evaluation order
- 为什么要对其进行修改
- 还有一个其他问题就是上述的unspecified behavior是什么?在cppref没有找到定义。
一楼是不可能喂熊的。
正题
本人一直都搞不懂为什么Cpp/C会出现undefined behaviors of evaluation order这么鸡肋的问题。
更为剧毒的是,ISO每出一次新标准就会对其中的一些进行well-define,或是做出修改。
举证:
> '''
i = i++ + 1; // undefined behavior (until C++17)
i = ++i + 1; // undefined behavior (until C++11)
++ ++i; // undefined behavior (until C++11)
f(++i, ++i); // undefined behavior (until C++17)
//然后这个在Cpp17是变成了unspecified behavior
f(i = -1, i = -1); // undefined behavior (until C++17)
cout << i << i++; // undefined behavior (until C++17)
a[i] = i++; // undefined behavior (until C++17)
'''
所以现在的问题是
- 为什么会出现undefined behaviors of evaluation order
- 为什么要对其进行修改
- 还有一个其他问题就是上述的unspecified behavior是什么?在cppref没有找到定义。