社区
C++ 语言
帖子详情
重载赋值运算符的返回值
cradmin
2007-08-16 06:11:05
最近看到C++的运算符重载,赋值运算符如=,+=,-=,.....,为什么operator=(),operator+=()...的返回值必须是对象的引用,书上说是保证这样的表达式赋值a=b=c,我把返回值改为按值返回,代码也能通过啊,到网上查了下,不过还是有点迷糊,大家给详细解释一下,有具体例子更好了,感谢。。。。。
对了,还有个问题麻烦下大家,函数调用按值返回(对象)时是不是都要生成一临时对象,但有时候根本用不到返回值,C++这样做是不是仅仅为了保证一致性
...全文
595
6
打赏
收藏
重载赋值运算符的返回值
最近看到C++的运算符重载,赋值运算符如=,+=,-=,.....,为什么operator=(),operator+=()...的返回值必须是对象的引用,书上说是保证这样的表达式赋值a=b=c,我把返回值改为按值返回,代码也能通过啊,到网上查了下,不过还是有点迷糊,大家给详细解释一下,有具体例子更好了,感谢。。。。。 对了,还有个问题麻烦下大家,函数调用按值返回(对象)时是不是都要生成一临时对象,但有时候根本用不到返回值,C++这样做是不是仅仅为了保证一致性
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kvsupermark
2008-10-10
打赏
举报
回复
我想请教一下
为什么返回对象的引用进行a=b=c;操作的时候效率很高,是不是这样的赋值不需要调用拷贝构造函数,如果不是那他们又是怎样进行赋值的,望不吝赐教
jxlczjp77
2007-08-17
打赏
举报
回复
===================================================
1.用引用时,为什么临时变量不会析构,用指针就会,不太明白,这算不算指针跟引用的一个区别呢,能解释下吗,谢谢
===================================================
C++ primer上有提到这个问题,试验了一下也正确,算是规定吧,记住就行
const A &b=fun();//在vc6下确实加不加const都行,非const在新的标准中应该是不行
linux_is_perfect
2007-08-17
打赏
举报
回复
C++编程思想第二卷上有几乎所有操作符的重载
可以买一本看看, 书相当不错...
cradmin
2007-08-16
打赏
举报
回复
多谢楼上两位解答,
--------------------------------------------
再来一个指针的
A *c=&fun();
fun返回值填入临时变量后,将临时变量的指针赋给变量c,但这时候与引用不同,临时变量仍然会被析构,临时变量的生命期结束,b指向了一个已经被析构的对象,危险。
-------------------------------------------------
1.用引用时,为什么临时变量不会析构,用指针就会,不太明白,这算不算指针跟引用的一个区别呢,能解释下吗,谢谢
2.像fun();这样的调用,根本用不到返回的临时变量,这时也要生成临时变量,是吧
3.
----------------------------
不好像对于新的C++标准,需要一个const类型的引用才能指向临时对象,这样
const A &b=fun();
-------------------------
恩,应该是这样,
临时变量都是常量,那A &b=fun();这样的赋值,就是把常量赋给非常量引用,这在C++中不允许,我在VC++6.0试了下,也可以,是不是VC对标准支持不太好
jxlczjp77
2007-08-16
打赏
举报
回复
如果按值返回,你这样写a=b=c;是可以,但问题如楼上说的,效率太低了。
按值返回有按值返回的好处
A fun(){
A a;
//...
return a; //一定要按值返回,不能返回局部对象的引用
}
按值返回的临时变量,也并不一定马上就会被析构
这样
A a;
a = fun();//fun返回一个临时对象,赋值给a后临时对象将会析构
而这样:
A &b=fun();
fun返回值填入临时变量后,将临时变量的引用赋给变量b,由于有一个引用指向了这个临时变量,将不会再析构这个临时变量,相当于延长了这个临时变量的生命周期。
再来一个指针的
A *c=&fun();
fun返回值填入临时变量后,将临时变量的指针赋给变量c,但这时候与引用不同,临时变量仍然会被析构,临时变量的生命期结束,b指向了一个已经被析构的对象,危险。
不好像对于新的C++标准,需要一个const类型的引用才能指向临时对象,这样
const A &b=fun();
gfxiang
2007-08-16
打赏
举报
回复
当然你不返回引用也可以,不过效率低下,每次都得调用拷贝构造函数
Java_all
Java基础练习整理基础知识Java_demo_basic 1.1数据转换com / jwang / demo_1 / data_conversion.java隐式转换强制转换1.2
运算符
com / jwang / demo_1 / Operator.java算术
运算符
赋
值
运算符
关系
运算符
逻辑
运算符
三元...
【C++】
赋
值
运算符
重载
的
返回
值
分析
转载: https://blog.csdn.net/Always__/article/details/50532323其实对于
重载
赋
值
运算符
,
返回
值
是引用或者不是都行,代码都可以运行,之所以用引用是为了提高代码效率,为什么引用就会提高代码效率呢?...
C++基础知识 -
重载
赋
值
运算符
‘=‘
为什么要对
赋
值
运算符
“=”进行
重载
某些情况下,当我们编写一个类的时候,并不需要为该类
重载
“=”
运算符
,因为编译系统为每个类提供了默认的
赋
值
运算符
“=”,使用这个默认的
赋
值
运算符
操作类对象时,该
运算符
会...
C++
赋
值
运算符
重载
是一个指针,里面存放的是指向存储 age 内容的地址,不
重载
赋
值
运算符
时,使用默认的
赋
值
运算符
时这是把 people1的 mp_age指针里存放的地址
赋
值
给了people2的mp_age指针导致两个指针指向了同一块内存空间,这时候...
重载
赋
值
运算符
时为什么需要
返回
引用类型?
c++ primer P492:
赋
值
运算符
的行为与...
重载
赋
值
运算符
时不一定非得
返回
左侧运算对象得拷贝,但是如果不这样做出错的风险会加大。 当类没有指针类型的成员时
返回
左侧对象拷贝不会出错,代码如下: Test.h #pragma once
C++ 语言
64,682
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章