C++是否强制执行return语句?

dew*_*rde 7 c++ compiler-errors return-type

好吧,我用C++编译器发现了一些奇怪的东西.

我有一个不太复杂的代码重构,我不小心设法离开了没有返回语句的路径.我的错.另一方面,当我运行它并且该路径被击中时,这个编译和分段显然.

这是我的问题:这是一个编译器错误,还是不能保证C++编译器会在非void返回函数中强制需要return语句?

哦,并且要清楚,在这种情况下,这是一个不必要的声明,没有伴随的其他.没有任何东西,没有退出,没有中止.

Joh*_*itb 13

无法保证C++编译器会强制执行该操作.C++函数可能会被编译器未知的机制跳出其控制流.使用C++编写OS内核时的上下文切换就是一个例子.被调用函数抛出的未捕获异常(其代码不一定对调用者可用)是另一个异常.

其他一些语言(如Java)明确强制使用在编译时可用的知识,所有路径都返回一个值.在C++中,这不是正确的,就像语言中的许多其他场合一样,也不会检查从其边界中访问数组.


小智 12

我个人认为这应该是一个错误:

int f() {
}

int main() {
    int n = f();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但大多数编译器都将其视为警告,您甚至可能必须使用编译器开关来获取警告.例如,在g ++上你需要-Wall得到:

[neilb@GONERIL NeilB]$ g++ -Wall nr.cpp
nr.cpp: In function 'int f()':
nr.cpp:2: warning: no return statement in function returning non-void
Run Code Online (Sandbox Code Playgroud)

当然,使用g ++,你总是应该至少使用-Wall进行编译.