for*_*818 7 c++ recursion loops undefined-behavior language-lawyer
没有副作用的无限循环是不确定的行为。有关cppreference的示例,请参见此处。更简单的例子:
int foo() {
while(true) {}
return 42;
}
Run Code Online (Sandbox Code Playgroud)
现在考虑几乎相等
int bar() {
if (true) return bar();
return 42;
}
Run Code Online (Sandbox Code Playgroud)
这还会调用未定义的行为吗?
或用不同的措辞:根据语言,无限递归属于哪类错误?
PS:请注意,我知道运行时的含义:循环原则上可以永远运行,而递归最终将导致stackoverflow。尽管我主要对编译器对它们的操作感兴趣。也许是一个相当学术性的问题...
Rak*_*111 10
不,没有区别。[basic.progress] p1:
该实现可以假定任何线程最终都将执行以下操作之一:
终止,
调用库I / O函数,
通过可变的glvalue进行访问,或
执行同步操作或原子操作。
无限循环的方式无关紧要;如果它没有完成以上任何要点,您将获得UB。包括以下内容:
int bar(int cond) {
if (cond == 42) bar(cond);
return 42;
}
bar(some_user_input);
Run Code Online (Sandbox Code Playgroud)
允许编译器假定some_user_input永远不会是42。
| 归档时间: |
|
| 查看次数: |
332 次 |
| 最近记录: |