C ++返回值没有return语句

时间:2011-01-27 11:37:31

标签: c++ return-value

当我运行这个程序时:

#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?而且,如果函数sqr(a)中没有return语句,如何将值返回到int sqr(int &x)

感谢。

6 个答案:

答案 0 :(得分:30)

严格来说,这会导致未定义的行为。实际上,由于sqr具有返回类型int,因此即使没有return语句,它也会返回一些内容。那个东西可以是任何int值。

添加return语句并在编译器中打开警告(例如g++ -Wall)。

int sqr(int &x)
{
    return x = x*x;
}

答案 1 :(得分:8)

这是一些垃圾,取决于一些因素。可能这是存储在内存中的值,如果函数有return语句,函数会将结果放在内存中。该内存未经处理,然后由调用者读取。

不要想太多 - 只需添加一个return声明。

答案 2 :(得分:4)

您的函数sqr()没有返回语句。该函数具有与返回值有关的未定义行为。您的第一个输出显示此返回值。

编译器应该显示诊断。

试试这个:

int sqr(int x)
{
  return x*x;
}

答案 3 :(得分:3)

您正在尝试打印sqr(int&amp; x)的返回值,在这种情况下这是垃圾值。但是没有返回正确的X * X. 尝试从sqe

返回有效的X * X.
  

int sqr(int &x) { x= x*x; return x;}

答案 4 :(得分:2)

如果函数未声明void,那么必须有一个return语句,告诉返回调用者时应该是什么值。如果你没有这样做而只是函数结束而没有返回值,则调用此函数的结果是"Undefined Behavior",这意味着你的程序可以执行任何操作(包括崩溃或删除硬盘上的所有内容)。 / p>

通常情况下,如果该值只是一个简单的int,您将获得时髦的数字,但在更复杂的情况下,可能会成为一个大问题的根源。只是不要这样做。

编译器通常会通知您,如果得到适当的指示,您会忘记返回声明(即启用最大警告级别)。您可以省略仅在函数未实际返回的情况下返回值(即抛出异常或永远循环)。

此外,由于C ++语言的疯狂特殊规则,函数main可以在没有return语句的情况下结束,尽管被声明为返回int。不要浪费你的时间寻找这个例外的合理原因,没有。

答案 5 :(得分:1)

您需要在以下选项之间做出选择:

1)通过引用/值传递并返回INT。

2)通过引用传递AND返回void。

此选择取决于您的功能目的。

如果你想要一个能给出数字平方的函数,可以使用第一个。如果你想要一个带变量的函数并用它的平方代替它,那么使用第二个。

所以:

int sqr(int& x)
{
    return x*x;
}

OR

void sqr(int& x)
{
    x= x*x;
}