没有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; }