BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #79238同步于 2014/5/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【问题】String & String::operator = (String const &other)

tinyXML
2014/5/8镜像同步27 回复
程宝中的一个示例的解释,有些疑问。(程序员面试宝典第十章面向对象 P113 最下面的提问) 【此问题答案在22楼】 MyString类的赋值函数。 MyString& MyString::operator = (const MyString &other) { //一些操作,略过 return *this; }; 我能想到的作用:a.避免造成函数内对象修改。 b.能够实现类似MyString mystr = "1234"常量字符串的赋值操作; 不明白的地方: 1.const变量向非const变量的转化。 例如:MyString s3; const MyString s4(theStr); s3 = s4; 不加const会报错,加上const就可以了??不明白。。。。 2.“+”赋值操作。 程序员面试宝典中解释说 “ 其次是诸如: MyString s7(pello); MyString s8(pello); MyString s9(pello); s9 = s7+s8; 不用const也会报错,因为用“+”赋值必须返回一个操作值已知的MyString对象,除非它是一个const对象。”。 这句话不理解。 难道意思是const引用可以转化为右值,然后就可以赋值了吗???不明白。。。。 请各位同学指导下,不胜感激!
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
tinyXML机器人#1 · 2014/5/8
自顶一下
blackwc2006机器人#2 · 2014/5/8
const就是个修饰符,不影响数据的类型,你可以理解为这个变量是readonly的 发自「贵邮」
tinyXML机器人#3 · 2014/5/8
文中的两点疑惑还是没明白,求详解 【 在 blackwc2006 的大作中提到: 】 : const就是个修饰符,不影响数据的类型,你可以理解为这个变量是readonly的 : 发自「贵邮」 来自「北邮人论坛手机版」
liuaner022机器人#4 · 2014/5/9
对于第一个问题,我觉得是因为 = 运算符的参数要求是 const,所以s4要加const修饰 小白路过
tinyXML机器人#5 · 2014/5/9
【 在 liuaner022 的大作中提到: 】 : 对于第一个问题,我觉得是因为 = 运算符的参数要求是 const,所以s4要加const修饰 : 小白路过 ??? int a,b; a = 14; b = a;//右参数不是const啊,怎么解释?
nanAdair机器人#6 · 2014/5/9
不加const会出错指的是s4的定义吗? 这里只有s3 = s4会调用copy-assignment constructor有关系呀。 【 在 tinyXML 的大作中提到: 】 : 程宝中的一个示例的解释,有些疑问。 : MyString类的赋值函数。 : MyString& MyString::operator = (const MyString &other){}; : ...................
tinyXML机器人#7 · 2014/5/9
【 在 nanAdair 的大作中提到: 】 : 不加const会出错指的是s4的定义吗? : 这里只有s3 = s4会调用copy-assignment constructor有关系呀。 : 大概知道了。s3 = s4的时候,调用赋值函数。假如此时的MyString& MyString::operator = (const MyString &other){};函数形参中缺少const,则不能正确引用s4,所以就不能正确赋值给s3了。对吗?? 个人理解。。。
iliketour机器人#8 · 2014/5/9
避免产生临时对象的原因不是const而是& MyString mystr = "1234" 会调用MyString 的构造函数 不会调用operator= 不加const会报错,加上const就可以了原因是不匹配 s3.=(s4) 声明时说接受一个const的参数,s4是const当然接受,传一个非const的 不匹配了 传const的参数,目的是为了在内部不修改外面传人对象的值,是函数里面,不是外面
iliketour机器人#9 · 2014/5/9
返回值加const原因是+完后防止下面情况 (s3+s4).a = 3;(假设类有个a的成员变量) 防止外面再次修改成员变量