是否存在代码在c++11中有一个序列点而在c++03中没有的情况
Are there any situations where code would have a sequence point in c++11 but not c++03?
现在新的c++11标准对序列点的描述方式进行了更改,我正试图找出c++03和c++11之间到底发生了什么变化。
特别是,有没有任何情况下,看起来相同的代码在c++11中有一个序列点,但在c++03中没有?
C++11中没有序列点,而是有前后关系的排序。
以下是一些琐碎的例子,其中行为在C++03和C++11 之间不同
int x = 10;
++++x; // well defined in C++11
int x = 10;
x = ++x +1; //well defined in C++11
为什么?看看这个答案和相关的线索。
我认为最著名的例子是预增量运算符。
int i = 0;
++ ++ ++ i;
在C++03中,这将是UB,而在C++11中,每个赋值都是在下一次求值之前排序的。
在标准中搜索差异是很困难的,因为它们去掉了"序列点"术语,转而使用"有序之前"之类的术语,并从头开始重写了许多规则。
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 函数中堆分配的效果与缺少堆分配的情况
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在没有信号的情况下从C++执行QML插槽
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 为什么在某些情况下不写入此文件?
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何在没有外部库的情况下使用C++03约束执行基于正则表达式的字符串操作
- 如何在 C++03 中没有重复代码的情况下在堆栈上创建一个非常量 C 字符串数组?
- C++03 中的某些值初始化情况不调用构造函数?
- 如何在不解析的情况下将重载函数指针作为参数传递 (C++03)
- 是否存在代码在c++11中有一个序列点而在c++03中没有的情况
- 在这种情况下,是否有类似于C++03的constexpr的内容