C++引用与变量名的区别

1.

string Fun1()

{
      string num="ly";
  return num;
}
//在程序中使用此方法不会报错,因为方法执行完毕以后虽然num被释放,但是num的值会被保存到一个临时存储单元,然后从临时存储单元复制到调用此方法给其赋值的变量中去(如:在main方法中:string mynum=Fun1(),num的值就会被保存到mynum)

2.

string& Fun2()

{
  string num="ly";
  return num;
}

//在程序中使用此方法会报错,因为返回的是对num的引用,而Fun2()方法执行完毕以后num被释放了,所以返回的引用试图引用已经被释放的内存会报错

 

 

后来研究发现,将以上两个例子中的string类型换做int类型,都不会报错。既:

#include <iostream>
#include <string>
using namespace std;

int& Fun1()
{
int num=123;
return num;
}
int main()
{
  int mynum=Fun1();//运行到这一句居然不报错,为什么?难道Fun1中的局部变量num没有被释放?
  cout<<mynum<<endl;  
  return 0;

 

 

如果将int类型换为int指针类型,又会报错:

#include <iostream>
#include <string>
using namespace std;

int*& Fun1()
{
    int num=456;
    int *p=&num;
    return p;
}
int main()
{
    int* p=Fun1();//运行到这一句居然不报错,为什么?难道Fun1中的局部变量num没有被释放?
    cout << "result:\n";//在对指针p取值之前,必须任意调用一个方法,以产生参数压栈或局部变量申请内存操作,好覆盖Fun1方法中的具备变量num
    cout<<*p<<endl;  //输出一个错误的值
    return 0;
}

 

 

原文链接: https://www.cnblogs.com/mxw09/archive/2010/10/28/1863062.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++引用与变量名的区别

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/16719

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 下午5:05
下一篇 2023年2月7日 下午5:05

相关推荐