C++中函数返回值为引用

    QString str = "abc";
    qDebug()<<__FILE__<<"["<<__LINE__<<"]"<<str;
    str.replace('a','b');
    qDebug()<<__FILE__<<"["<<__LINE__<<"]"<<str;
QString &QString::replace(QLatin1String before, QLatin1String after, Qt::CaseSensitivity cs = Qt::CaseSensitive)

C++函数返回引用_c++ 返回引用-CSDN博客

"abc"

"bbc"

函数返回值时会产生一个临时变量作为函数返回值的副本,而返回引用时不会产生值的副本。 

1.不可以返回局部对象的引用

函数执行完毕,程序将释放分配给局部对象的存储空间。此时,对局部对象的引用就会执行不确定的内存。

2.

     const string &shorterString(const string &s1,const string &s2)
      {
             return s1.size()<s2.size()?s1:s2;
      }

以上函数的返回值是引用类型。无论返回s1还是s2,调用函数和返回结果时,都没有拷贝这些string对象。

3.返回this指向的对象。

在类的成员函数中,返回引用的类对象,一般为this指向的对象。

4.返回this的成员变量

重要的是,函数的返回值如果是引用,那么不可以引用即将被析构的变量

    QString str = "abc";
    qDebug()<<__FILE__<<"["<<__LINE__<<"]"<<str<<&str;
    QString str1 = str.replace('a','b');
    qDebug()<<__FILE__<<"["<<__LINE__<<"]"<<str1<<&str1;

"abc" 0x97fdd0

"bbc" 0x97fdcc

引用赋值给变量 

  QString str1 = str.replace('a','b');

分析这句:

str.replace('a','b');得到的是QString&

这里应该又进行了赋值操作,得到了新的QString,所以str和str1的地址不同的。

另一个例子:

    int m = 1;
    int &m1 = m;
    int m2 = m1;
    qDebug()<<__FILE__<<"["<<__LINE__<<"]"<<&m << &m1 <<&m2;

 0x97fdac 0x97fdac 0x97fda8

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lpl还在学习的路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值