【发布时间】:2018-03-28 16:37:12
【问题描述】:
假设我们有以下(非常基本的代码)
public int Foo()
{
while (true)
{
}
// No "return 0" etc. needed here.
}
编译器可以理解该方法永远不会返回,因此会显示警告,并且它不需要该方法具有return 语句。
如果有的话
public void WontExit()
{
while (true)
{
}
}
public int Foo()
{
this.WontExit();
return default(int); // This is needed here.
}
需要return 语句,因为编译器似乎无法预见它永远不会到达。
- 为什么编译器允许在第一种情况下省略
return语句?为什么它也不需要return声明? (这里的内部结构是什么?) - 有什么方法可以指示编译器(或可达性分析)在第二种情况下,
return代码路径也永远无法到达?
【问题讨论】:
-
为什么
this.WontExit()在典型操作中不会退出?这是绝对保证的吗? -
顺便说一句,给定的代码可以退出;即通过异常
-
在实际代码中绝对保证,因为它会在所有代码路径上
throw。 -
我同意:在
while循环中可能有一个return语句可以退出函数,因此编译器很难保证它总是无限运行. -
@JackBrown 你是对的,这就是为什么我想知道 C++ 中是否有类似
[[noreturn]]的东西,它可以用于程序员知道代码永远不会返回的情况。
标签: c#