我很困惑,以下程序如何正常工作。我从函数返回对局部变量的引用,并且为引用赋值不止一次。我希望编译器为引用赋值抛出一个错误。
#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;
}
答案 0 :(得分:1)
这是未定义的行为。根据§1.3.24,未定义的行为被描述为:
本国际标准没有要求的行为
与流行的看法相反,这并不意味着它总会产生错误。该标准没有任何要求。
为什么它允许“Value1 = getNum();”。 Value1是一个已经分配给某事物的参考。
因为在:
Value1 = getNum();
您没有重新分配参考。您在operator=
上致电int
,将getNum
的返回值复制为Value1
。