前面的 Effective C++ 解析 1 说明了条款 3 和 5 那么下面继续来说明其他条款!
Effecive C++ 解析2:将解析条款1 和 条款2
注意点:两个特殊情况要注意
const: const char * constauthorName = "Scott Meyers";
关于 const的含义和用法,特别是和指针相关联的问题,参见条款 21(待更新)。
class GamePlayer { private: static const int NUM_TURNS = 5; // constant declaration int scores[NUM_TURNS]; // use of constant ... };
如:
nt a = 5, b = 0; max(++a, b); // a 的值增加了2次 max(++a, b+10); //a 的值只增加了1次解决方法:
inlineint max(int a, int b) { return a > b ? a : b; }更优美的方法:
template<class T> inline const T& max(const T& a, const T& b) { return a > b ? a : b; }
这个模板产生了一整套函数,每个函数拿两个可以转换成同种类型的对象进行比较然后返回较大的(常量)对象的引用。因为不知道T的类型,返回时传递引用可以提高效率(见 Effective条款22:待更新)。
class Rational { public: Rational(int numerator = 0, int denominator = 1); ... private: int n, d; // 分子,分母 friend ostream& operator<<(ostream& s, const Rational& r); }; ostream& operator<<(ostream& s, const Rational& r) { s << r.n << ‘/‘ << r.d; return s; }
第一,有些iostream的操作实现起来比相应的C stream效率要低,所以不同的选择会给你的程序有可能(虽然不一定,参见条款M16)带来很大的不同。但请牢记,这不是对所有的iostream而言,只是一些特殊的实现。
第二,在标准化的过程中,iostream库在底层做了很多修改(参见条款49),所以对那些要求最大可移植性的应用程序来说,会发现不同的厂商遵循标准的程度也不同。
第三,iostream库的类有构造函数而<stdio.h>里的函数没有,在某些涉及到静态对象初始化顺序的时候,如果可以确认不会带来隐患,用标准 C库会更简单实用。
说了那么多,无非感觉一个使用函数一个是操作对象,方便性可想而知。
原文:http://blog.csdn.net/u010236550/article/details/19200945