【问题标题】:Are there any situations where code would have a sequence point in c++11 but not c++03?是否存在代码在 c++11 中具有序列点但在 c++03 中没有的情况?
【发布时间】:2012-03-06 19:22:22
【问题描述】:

现在新的 c++11 标准已经改变了序列点的描述方式,我试图找出 c++03 和 c++11 之间到底发生了什么变化。

特别是,在任何情况下,看起来相同的代码在 c++11 中会有序列点,但在 c++03 中没有?

【问题讨论】:

    标签: c++ c++11 sequence-points


    【解决方案1】:

    我认为最著名的例子是前置自增运算符。

    int i = 0;
    ++ ++ ++ i;
    

    在 C++03 中,这将是 UB,而在 C++11 中,每个赋值都在下一次评估之前排序。

    在标准中搜索差异是很困难的,因为他们摆脱了“序列点”术语,取而代之的是“之前排序”等,并且从头开始重写了许多规则。

    【讨论】:

    • Searching the Standard for differences is tough because they got rid of the "sequence point" terminology 这就是我发布这个问题的确切原因。
    • @shuttle87 是的,很抱歉,但至少我想出了一个例子 ;v)
    【解决方案2】:

    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
    

    为什么?看看this的回答和相关的帖子。

    【讨论】:

      猜你喜欢
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多