中易网

c++中&和&&引用工作原理的区别?

答案:1  悬赏:50  
解决时间 2021-02-27 01:36
我知道引用&和&&分别适用于何中情况,现在恳请指导如下问题:

引用&是一个类型变量的别名,如:( int &a=b;) 表示的a和b是同一个变量(既a的地址和b的地址相同),那么引用&&表示的是什么?如:(int &&k=i+j;)k 和 i+j 间的联系,请具体说明。
最佳答案
&&就是右值引用, &是普通的左值引用, 左值是可以放在赋值号=左边的值, 右值是只能放在=右边的值, 右值没有一个"变量"名字, i+j返回的值可以视作是放在一个临时存放内存空间里的, 这个空间并不能被用来赋值, 你不能写i+j = 5等; &&可以把这种临时的值和存在变量里的值区分开来


常见应用情况是, 例如String类内部都有一个char *指针pstr指向实际存放字符串的内存, 当写str3 = str1.concat(str2)的时候实际执行了2次构造函数, 第一次是concat构造一个新的String对象, 第二次是赋值的时候执行了一次拷贝构造函数(或者operator=)把concat返回的临时值复制了一次给str3的内存, 然后concat的临时值在之后立即被销毁了, 显然这个第二次拷贝构造很多余
有了&&之后可以给String增加一个参数是&&的拷贝构筑函数以及operator=(&&)来解决这个问题:

String(String &&other) {
    pstr = other.pstr;
    other.pstr = nullptr; //直接把临时值other的pstr拿来用而不再复制一次, 然后把other.pstr置null避免other的析构函数delete pstr
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
关于CAD里的DI测距命令
新丰县富贵鸟男装(丰凯商厦A座西南)地址在哪
三八节就准备要到了,我们要搞趣味活动,大家
每天12点睡到8点,为啥深度睡眠时间很低?咋
笔记本蓝屏后没声音
为什么我爸爸要处处针对我呢?
刘姑店中心幼儿园我想知道这个在什么地方
急求一个会计舞弊相关内容的外文文献以及对应
唤勤来酒楼(锦春店)怎么去啊,有知道地址的么
求好看的特工婴穿或胎穿的小说
怎样铺地暖?
辛侯庄村村地址有知道的么?有点事想过去
推荐几本鬼修小说
亿达投资在哪里啊,我有事要去这个地方
世界抛弃了我我被世人厌恶我真的活不下去我从
推荐资讯
如今无法隐忍离去.是那首歌的歌词
女人都喜欢用情趣用品吗?真的吗
足球1442阵型各位置职责和分工
爱金餐馆在哪里啊,我有事要去这个地方
南通海门到无锡的发车时间有知道的么?
PSP2006怎么刷机
大学毕业 想考环艺专业研究生 是报在职研究生
酷派7620LW00手机多少钱
Java程序员项目经验怎么写?
求沈佳妮没事我真没事儿 视频
绿墙边的少年百度云
对于大量成堆难以清点的财产物资,应采用的清
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?