More Effective C++
self_mind
知识的盛宴,个人的独享!
展开
-
效率: 条款23 考虑使用其他程序库
举个例子:考虑iostream和stdio库,任何一位C++程序员对这两者应该都不陌生。如iostream库具有类型安全特性,并且可扩充。然而在效率方面stdio的可执行文件通常比iostream更小更快。然而,iostream和stdio之间的性能对比只是个例子,重点是:不同的程序库即使提供相似的机能,也往往表现出不同的性能取舍策略,所以一旦你找出程序的瓶颈,你应该思考是否有可能因为改用另一原创 2016-03-01 22:28:50 · 273 阅读 · 0 评论 -
效率:条款19 了解临时对象的来源
人们对临时对象有普遍的误解:如swap函数:templatevoid swap(T& object1 , T& object2){ T temp = object1; object1 = object2; object2 = temp;}认为temp是一个临时对象,其实不然,temp不是临时对象,而是一个函数的局部对象。C++真正的临时对象是不可见的原创 2016-02-25 22:26:46 · 310 阅读 · 0 评论 -
效率:条款20 协助完成“返回值优化(RVO)”
函数如果返回对象,对效率狂而言是一个严重的挫折,因为以by-value方式返回对象,背后隐藏的constructor和destructor都将无法消除。有的人会返回指针,于是导致下列这种拙劣的语法形式:const Rational* operator*(const Rational* lhs,const Rational* rhs){ return new Rational(lh原创 2016-02-27 22:45:03 · 381 阅读 · 0 评论 -
效率: 条款21 利用重载技术避免隐式类型转换(implicit type conversions)
理解本条款内容之前需要先看一个例子:class UPint{public: UPint(); UPint(int value); ....}const UPint operator+(const UPint& lhs,const UPint& rhs);UPint u1,u2;UPint u3 = u1 + u2;//这没什么可讨论的,可以执行。UPint原创 2016-02-28 19:52:29 · 739 阅读 · 0 评论 -
效率:条款22 考虑以操作符复合形式op+= 取代其独身形式op=
在c++程序中,我们已知x=x+y 可以写成x+=y;但是在C++中,operator+,operator=和operator+=之间并没有设立任何互动关系,所以如果你希望这3个操作符都存在并且有着你所期望的互动关系,你就必须自己来实现。同理-,*,/也是一样。要确保操作符的复合形式和其独身形式之间的自然关系能够存在,一个好方法就是以复合形式为基础来实现独身形式。如:Rational& o原创 2016-02-29 23:02:03 · 412 阅读 · 0 评论