返回信息流程宝中的一个示例的解释,有些疑问。(程序员面试宝典第十章面向对象 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引用可以转化为右值,然后就可以赋值了吗???不明白。。。。
请各位同学指导下,不胜感激!
这是一条镜像帖。来源:北邮人论坛 / cpp / #79238同步于 2014/5/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【问题】String & String::operator = (String const &other)
tinyXML
2014/5/8镜像同步27 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
文中的两点疑惑还是没明白,求详解
【 在 blackwc2006 的大作中提到: 】
: const就是个修饰符,不影响数据的类型,你可以理解为这个变量是readonly的
: 发自「贵邮」
来自「北邮人论坛手机版」
【 在 liuaner022 的大作中提到: 】
: 对于第一个问题,我觉得是因为 = 运算符的参数要求是 const,所以s4要加const修饰
: 小白路过
???
int a,b;
a = 14;
b = a;//右参数不是const啊,怎么解释?
不加const会出错指的是s4的定义吗?
这里只有s3 = s4会调用copy-assignment constructor有关系呀。
【 在 tinyXML 的大作中提到: 】
: 程宝中的一个示例的解释,有些疑问。
: MyString类的赋值函数。
: MyString& MyString::operator = (const MyString &other){};
: ...................
【 在 nanAdair 的大作中提到: 】
: 不加const会出错指的是s4的定义吗?
: 这里只有s3 = s4会调用copy-assignment constructor有关系呀。
:
大概知道了。s3 = s4的时候,调用赋值函数。假如此时的MyString& MyString::operator = (const MyString &other){};函数形参中缺少const,则不能正确引用s4,所以就不能正确赋值给s3了。对吗??
个人理解。。。
避免产生临时对象的原因不是const而是&
MyString mystr = "1234"
会调用MyString 的构造函数 不会调用operator=
不加const会报错,加上const就可以了原因是不匹配 s3.=(s4) 声明时说接受一个const的参数,s4是const当然接受,传一个非const的 不匹配了
传const的参数,目的是为了在内部不修改外面传人对象的值,是函数里面,不是外面