没有return语句的C ++返回值
当我运行这个程序时:
#include <iostream> int sqr(int&); int main() { int a=5; std::cout<<"Square of (5) is: "<< sqr(a) <<std::endl; std::cout<<"After pass, (a) is: "<< a <<std::endl; return 0; } int sqr(int &x) { x= x*x; }
我得到了以下输出:
Square of (5) is: 2280716 After pass, (a) is: 25
什么是2280716
? 而且,在函数int sqr(int &x)
没有return
语句的情况下,如何获取返回到sqr(a)
的值?
谢谢。
严格来说,这会导致未定义的行为 。 实际上,由于sqr
返回types为int
,所以即使没有return
语句,它也会返回一些东西。 这东西可以是任何int
值。
添加一个return
语句并在编译器中打开警告( g++ -Wall
)。
int sqr(int &x) { return x = x*x; }
这是一些垃圾,将取决于一些因素。 这可能是存储在内存中的值,如果函数return
语句,函数会将结果放到内存中。 这个内存被放开,然后被调用者读取。
不要想太多 – 只需添加一个return
语句。
你的函数sqr()
没有返回语句。 该函数具有未定义的有关返回值的行为。 你的第一个输出显示了这个返回值。
编译器应该显示一个诊断。
尝试这个:
int sqr(int x) { return x*x; }
你正试图打印sqr(int&x)的返回值,在这种情况下这是垃圾值。 但是不能返回正确的X * X。 尝试从sqe返回有效的X * X
int sqr(int &x) { x= x*x; return x;}
如果一个函数没有被声明为void
那么你必须有一个return语句来告诉返回给调用者的值是什么。 如果你不这样做,只是函数结束而没有返回值,调用这个函数的结果是“未定义的行为” ,这意味着你的程序可以做任何事情(包括崩溃或删除硬盘上的所有东西)。
通常情况下,如果这个值只是一个简单的int,你会得到时髦的数字,但在更复杂的情况下,可能是一个大麻烦的来源。 只是不要这样做。
编译器通常会通知您,如果正确指示(例如启用最大警告级别),您将忘记返回声明。 只有在函数没有实际返回的情况下(即引发exception或永远循环),您可以省略返回值。
您需要做出以下select:
1)通过参考值/值并返回一个INT。
2)通过引用传递并返回无效。
这个select取决于你的function的目的。
如果你想要一个函数给你的数字的平方使用第一个。 如果你想要一个带有variables的函数,并用它的方块代替它,使用第二个。
所以:
int sqr(int& x) { return x*x; }
要么
void sqr(int& x) { x= x*x; }