免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1679 | 回复: 5
打印 上一主题 下一主题

More Effective C++ 之 条款 20 ,在阅读 的 时候不是很 明白! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-28 05:54 |只看该作者 |倒序浏览
其中在讲到通过调用Rational类的构造 函数来降低临时对象的开销 :





// an efficient and  correct way to implement
// a function that returns an object

const Rational operstor*(const Rational& lhs,const Rational& rhs)
{
        return Rational(lhs.numberator()* rhs.numerator(),
                                      lhs.denominator() * rhs.denominator());
}

我 不 明白 的就是在这里,调用Rational类的构造函数(而且还没有该对象名字),这里是什么语义,那么C++好手
能否说一下在 "ANSI c++ Standard"上那一节能找到这个知识点!谢谢了!

论坛徽章:
0
2 [报告]
发表于 2009-03-28 12:06 |只看该作者
Rational(lhs.numberator()* rhs.numerator(),
                                      lhs.denominator() * rhs.denominator());

这个就是构造函数啊,只是使用的是显性调用,Rational(int, int);
一个类可以有很多构造函数,但是有一个缺省的,可以隐性调用,也可以显性调用

论坛徽章:
0
3 [报告]
发表于 2009-03-28 13:29 |只看该作者
原帖由 haochao 于 2009-3-27 13:54 发表
其中在讲到通过调用Rational类的构造 函数来降低临时对象的开销 :





// an efficient and  correct way to implement
// a function that returns an object

const Rational operstor*(const Rat ...


构造一个临时对象,返回的是对象的拷贝而不是引用(或者指针),因此是安全的。

论坛徽章:
0
4 [报告]
发表于 2009-03-28 15:48 |只看该作者
呵呵,这个 条款的重点并不是“安全不安全”, 通过避免局部对象对象的创建使其更有效率

论坛徽章:
0
5 [报告]
发表于 2009-03-28 15:58 |只看该作者
如果创建了局部对象,就多了一次拷贝操作
Rationa A = Rational(lhs.numberator()* rhs.numerator(),
                                      lhs.denominator() * rhs.denominator());
return A;
首先创建A,调用ct,然后返回一个A的拷贝,然后调用A的dt
你不觉得多做了一些操作吗?

论坛徽章:
0
6 [报告]
发表于 2009-03-28 16:38 |只看该作者
原帖由 haochao 于 2009-3-27 23:48 发表
呵呵,这个 条款的重点并不是“安全不安全”, 通过避免局部对象对象的创建使其更有效率


你看了这个条款没有?你举的代码的上一段代码就是同样的函数,只不过返回的是const Rational&
上面有段注释:
// another dangerous (and incorrect) way to avoid
// returning an object

你问的问题很简单,语法上就是构造了一个临时对象,并且返回。
重点是为什么这样是安全的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP