在返回非void的函数中键入No return

use*_*027 4 c++

我的C++代码如下所示:

int f(int i){
    if (i > 0) return 1;
    if (i == 0) return 0;
    if (i < 0) return -1;
}
Run Code Online (Sandbox Code Playgroud)

它工作但我仍然得到:

警告:没有返回,函数返回非void

即使很明显所有案例都被涵盖了.有没有办法以"正确"的方式处理这个问题?

cad*_*luk 8

编译器没有意识到if条件涵盖了所有可能的条件.因此,它认为执行流程仍然可以通过所有ifs.

因为这些条件中的任何一个都假定其他条件为假,您可以这样写:

int f(int i) {
    if (i > 0) return 1;
    else if (i == 0) return 0;
    else return -1;
}
Run Code Online (Sandbox Code Playgroud)

并且因为return语句最终终止了一个函数,我们可以将它缩短为:

int f(int i) {
    if (i > 0) return 1;
    if (i == 0) return 0;
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

注意缺少两个elses.