可能重复:
Can a local variable's memory be accessed outside its scope?!
这是一段代码:
#include <iostream>
using namespace std;
double &GetSomeData()
{
double h = 46.50;
double &hRef = h;
return hRef;
}
int main()
{
double nonRef = GetSomeData();
double &ref = GetSomeData();
cout << "nonRef: " << nonRef << endl;
cout << "ref: " << ref << endl;
return 0;
}
将nonRef打印为46.5 裁判不行。
第一个输出行为是正确还是刚运气?
由于
答案 0 :(得分:10)
是的,你很幸运。
返回对局部变量的引用是未定义的行为。 未定义的行为意味着任何事情都可能发生,并且无法定义行为。
关于未定义的行为,
C ++标准第1.3.24节声明:
允许的未定义行为包括完全忽略不可预测的结果,在翻译或程序执行期间以环境特征(有或没有发出诊断消息)的文件化方式行事,终止翻译或执行(发布诊断信息)。
答案 1 :(得分:0)
通常使用*来声明指针变量,并在指令后将指针取消引用回原始变量。 &安培;从变量
返回地址我没有测试过这个,但是下面的工作做得更好吗?
#include <iostream>
using namespace std;
double* GetSomeData()
{
double h = 46.50;
return &h;
}
int main()
{
double nonRef = GetSomeData();
double* ref = GetSomeData();
cout << "nonRef: " << nonRef << endl;
cout << "ref: " << *ref << endl;
return 0;
}
答案 2 :(得分:0)
如果您只是测试这两行之间的差异:
double nonRef = GetSomeData();
double &ref = GetSomeData();
尝试上课。
class test
{
public:
int x;
int& getx()
{
return x;
}
};
//Some code
test c;
int nonRef = c.getx();
int &ref = c.getx();
ref = 8;
nonref = c.getx();
在此之后,c.getx()返回8.