求救!关于函数返回引用的问题
程序如下:
#include <iostream>
#include <string>
using namespace std;
float& test(float,float);
void main(int argc,char* argv[])
{
float &pn=test(3.0f,1.2f);
cout<<pn<<endl;
cout<<pn<<endl;
cin.get();
}
float &test(float a,float b)
{
float c;
c=a*b;
return c;
}
结果却输出:
3.6
-1.#QNAN
问题分析:
因为返回的是一个局部变量的引用,结果却能正确的输出3.6,我连着输出了两次,但是第二次却输出-1.#QNAN,好奇怪的东东呀,向大家请教?请大牛解惑
[解决办法]
楼主你的程序里面那个函数返回的是局部变量的引用
(类似于返回了局部变量的指针),返回后该局部变量
空间被程序标识为可写、可读数据状态,你遇到的情况就是,
第一次输出时并没有其它数据写入该空间,所以你输出
该空间的数据得到的是3.6,但是第二次输出之前,第一
次输出之后有数据写入了该空间(可能就是第一次输出的输出
函数用到了该空间),所以导致你第二次输出的数据不再是3.6了。
[解决办法]
读取超出生存期UB,C++不保证任何可预测的行为。纯属RPWT。
非要搞清“为什么”(虽然没多少意义),要么反汇编,要么看编译器源码。
由于超出生存期的对象的存储不一定会被回收,基于性能等考虑,不一定会引起底层的错误——总之编译器也好运行时环境也好没义务提醒你这里错了,之后莫名其妙出问题纯属活该。
!关于函数返回引用的有关问题
求救!关于函数返回引用的问题程序如下:#include iostream#include stringusing namespace stdfloat&
