设为首页 加入收藏

TOP

effectiveC++(十五)(五)
2010-12-26 23:18:48 来源: 作者: 【 】 浏览:4341
Tags:effectiveC 十五
左边的对象
}

string& string::operator=(const string& rhs)
{

  ...

  return rhs;              // 返回右边的对象
}

对你来说,这好象是拿六个一和十二的一半来比较一样为难。实际上他们有很大的不同。

首先,返回rhs的那个版本不会通过编译,因为rhs是一个const string的引用,而operator=要返回的是一个string的引用。当要返回一个非const的引用而对象自身是const时,编译器会给你带来无尽的痛苦。看起来这个问题很容易解决——只用象这样重新声明operator=:

string& string::operator=(string& rhs)   { ... }

这次又轮到用到它的应用程序不能通过编译了!再看看最初那个连续赋值语句的后面部分:

x = "hello";                     // 和x.op=("hello");相同

因为赋值语句的右边参数不是正确的类型——它是一个字符数组,不是一个string——编译器就要产生一个临时的string对象(通过stirng构造函数——参见条款m19)使得函数继续运行。就是说,编译器必须产生大致象下面这样的代码:

const string temp("hello");      // 产生临时string

x = temp;                        // 临时string传给operator=

编译器一般会产生这样的临时值(除非显

首页 上一页 2 3 4 5 6 下一页 尾页 5/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇effectiveC++(十六) 下一篇effectiveC++(十四)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: