具体代码如下:
发布网友
发布时间:2022-05-10 16:58
我来回答
共4个回答
热心网友
时间:2023-10-17 10:53
又见有人玩引用了 :)
我试了试你的程序,结果的确是打印两个10.
int a = co();是将返回的临时变量x地址中的值赋值给a。(也就是将临时变量x在函数返回时的值赋值给a)
如果你所说是实,那么co()在返回前临时变量x的值已经改变了,可能是你的环境出了问题(可能流函数库有问题)。建议你将co()函数中加个打印语句,看看临时变量x的值是否被第一个打印语句改了,另外你如果会调试的话,建议单步跟踪到co()返回前看看临时变量x的值。
我回答过一个真正玩引用的问题,其中讲到了函数中的临时变量何时才会被覆盖,什么情况下可以在函数返回后继续利用其分配过的临时变量。
参考一下。
http://zhidao.baidu.com/question/510201654?&oldq=1
热心网友
时间:2023-10-17 10:53
根据你的函数声明,co()函数的返回值是一个int变量的地址,而x = 10 ,return x 返回的是int变量,而不是
int &,那么这个10在意义上就意味着地址为10 的内存空间了,int a =int ( 10),这个对于10的强制转换为,则是把内存第10块地址的值取了出来,强行取整,该值是4200665,所以打印出两个10根本就是不可能的,而你注释掉co函数的打印语句后,出现连个10 ,这件事,我觉得很难理解,毕竟你只有一个输出语句,那我建议你把另外一个输出也注释掉,看看会显示几个10,,以此推断到底是哪里出了问题。
热心网友
时间:2023-10-17 10:54
“
int& co()
{
int x = 10;
cout << x << endl;
return x;
}
”
dangling reference了!!
返回值是对局部对象的引用, 函数co一结束x就被析构了, 现在返回的栈上的随机内容。
如果非要返回局部引用可以做:
const int &a = co();
绑定一个栈上的临时对象到一个常量引用,这个临时对象的生命周期跟这个引用的生命周期相同(Note this only applies to stack basedreferences. It doesn’t work for references that are members of objects.)
热心网友
时间:2023-10-17 10:54
int& co()改为int co()