C++ 为什么函数工作得很好,但最终没有返回
我有一个关于定义末尾没有返回语句的函数的问题。它是如何工作的?它可以返回一些东西,因为当我们调用func时,要返回的值在堆栈上以随机数分配?检查以下示例:C++ 为什么函数工作得很好,但最终没有返回,c++,function,return,C++,Function,Return,我有一个关于定义末尾没有返回语句的函数的问题。它是如何工作的?它可以返回一些东西,因为当我们调用func时,要返回的值在堆栈上以随机数分配?检查以下示例: #include <iostream> using namespace std; int fun1(){ cout << "Fun1" << endl; } char fun2(){ cout << "Fun2" << endl; } short fun3()
#include <iostream>
using namespace std;
int fun1(){
cout << "Fun1" << endl;
}
char fun2(){
cout << "Fun2" << endl;
}
short fun3(){
cout << "Fun3" << endl;
}
float fun4(){
cout << "Fun4" << endl;
}
double fun5(){
cout << "Fun5" << endl;
}
int main()
{
cout << fun1() << " " << endl;
cout << fun2() << " " << endl;
cout << fun3() << " " << endl;
cout << fun4() << " " << endl;
cout << fun5() << " " << endl;
}
#包括
使用名称空间std;
int fun1(){
cout为了创建一个没有任何返回语句的函数,您需要将其设置为“void”函数。请记住,用于定义函数的变量类型是将在函数末尾返回的变量类型。如果函数为Int类型,则返回一个整数。如果函数为Char类型,则返回一个字符
上面的示例不起作用,因为在每种情况下,编译器都希望在函数末尾返回。但是如果在每个函数名之前都有“void int”,则函数将起作用,如下所示
void int fun1()
{
cout << "Fun1" << end;
}
void int fun1()
{
可能只是UB。请参阅。对于单个函数,如果它总是抛出异常且从未到达末尾,则不是错误。对于main()以外的任何函数,通过到达末尾从函数返回都是可以的。使用函数的结果是未定义的行为。因此,double x=fun5();是未定义的行为;只是fun5();很好是一个异常,其行为就好像您返回了0。@Boperson:没有引发异常,这是胡说八道。您误解了这个问题。它可以与某些编译器一起工作,您指定了返回值,但从不返回任何内容。我正在使用Visual Studio 2015,创建一个没有返回指令的非空函数将返回错误。让我感到奇怪的是编译器实际上不会给出某种构建错误。@丹尼尔.d>代码> Voint int Fun1(){} /Case>不是合法的C++,请看一下。