Dev*_*laN 1 c++ g++ undefined-behavior
我一直在研究C++的未定义行为示例,我发现了以下一个:
int a = 0;
a = a++;
Run Code Online (Sandbox Code Playgroud)
尝试了它,g++ -Wall -Wextra它让我警告序列点.
但后来我考虑使用参考的另一种情况:
int a = 0;
int &b = a;
b = a++;
Run Code Online (Sandbox Code Playgroud)
关于序列点,我没有对此大喊大叫.它似乎应该是显而易见的.是否有任何好的解释为什么这两个例子被编译器区别对待?
这可能看起来很明显UB,但你必须明白,有许多不同的方法来违反排序规则.并且证明任何特定表达是否违反是一个缓慢而复杂的过程,有时结果是不可能的.这就是为什么违反这些规则已经在标准中指定了未定义的行为,而不是在每种可能的违规行为都需要诊断的不良形式.
因此,编译器必须在某处绘制一条线,而不是花费资源来验证所有表达式.您的测试显示两个表达式位于该"行"的两侧.
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |