我如何阅读here on SO:

在C++中:

  • 不从非void函数返回是未定义的行为。
  • ... analysis requires inspection of the entire program, which is incompatible with separate compilation, and which is not even possible in the general case ...

  • 从我在该页面上的几个答案得出的结论来看,检查函数中是否存在return语句非常困难,有时实际上是不可能的。这不是非空函数返回的结果,C++标准却未定义其行为。

    但是,我听说在Java中,同一件事在编译时被报告为错误。

    问:我的理解正确吗? Java如何达到相同的目的?

    编辑:只是要清楚,我有兴趣了解:
  • 如果由于与编译器相关的实现困难而在C++标准中未定义,Java将如何实现相同的目标。
  • 如果不是那么困难,那么C++标准是否应该将其定义为错误?
  • 最佳答案

    Java通过拒绝运行某些程序来做到这一点,即使它们总是返回一个值。采取以下(愚蠢)方法

    public boolean test() {
       boolean var=true;
       if(var)
          return true;
    }
    

    该方法始终返回true,但是java仍将拒绝接受它为有效方法。 C++中的相同方法是合法的,因为它总是返回一个值。

    综上所述:如果编译器无法证明它总是会返回一个值,则Java将拒绝您的方法。有时这会拒绝总是返回值的方法。

    C++只相信程序员总是返回一个值,然后如果程序员未能返回某些内容,则会在运行时崩溃。

    10-04 16:30
    查看更多