for*_*818 3 c++ undefined-behavior language-lawyer
最近有人试图说服我cppreference是错误的,因为它说没有副作用的无限循环将是未定义的行为。与无限循环是否未定义相关的一个问题是无限循环与无限递归。两者都是未定义的吗?。接受的答案引用了标准并得出结论:是的,没有副作用的无限循环是未定义的行为。
其他相关问题有:
相关引用是([basic.progress]p1):
该实现可能假设任何线程最终都会执行以下操作之一:
- 终止,
- 调用库 I/O 函数,
- 通过易失性左值执行访问,或者
- 执行同步操作或原子操作。
当标准说“实现可能假设 X”时,这种措辞是否意味着包含“非 X”的代码未定义?
(在这个例子中,这意味着egfor (;;);是未定义的,但我很好奇该措辞的一般含义)
未定义的行为定义为:intro.defs:
本文档没有提出要求的行为
对于这个问题,这意味着:实现可能假设 X 始终成立。当 X 不成立时,该标准对实现没有强加任何要求(因为无论如何它总是成立)。没有副作用的无限循环是未定义的。
浏览标准时,我发现了“可能假设”措辞的另一个例子。在[优先级.队列].1中
[...]库假设函数或函数对象定义了严格的弱排序(28.7)。
使用带有未定义严格弱排序的优先级队列的比较器是未定义的。
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |