为什么以下程序运行正常?我从函数返回对局部变量的引用

时间:2014-04-08 15:29:56

标签: c++ function reference

我很困惑,以下程序如何正常工作。我从函数返回对局部变量的引用,并且为引用赋值不止一次。我希望编译器为引用赋值抛出一个错误。

#include <iostream>
using namespace std;

int& getNum()
{
    int myNum = 89;
    return myNum;
}

int& getAnotherNum()
{
    int myNum = 1000;
    return myNum;
}

int main()
{
    int& Value1 = getAnotherNum();   
    cout << "Value1 value is: " << Value1 << endl;

    Value1 = getNum();     
    cout << "Value1 value is: " << Value1 << endl;

return 0;
}

1 个答案:

答案 0 :(得分:1)

这是未定义的行为。根据§1.3.24,未定义的行为被描述为:

  

本国际标准没有要求的行为

与流行的看法相反,这并不意味着它总会产生错误。该标准没有任何要求。


  

为什么它允许“Value1 = getNum();”。 Value1是一个已经分配给某事物的参考。

因为在:

Value1 = getNum();

您没有重新分配参考。您在operator=上致电int,将getNum的返回值复制为Value1