//条款18:让接口容易被正确使用,不易被误用 // 1.如果客户企图使用某个接口而却没有获得他所预期的行为,那么这个代码就不该通过编译. // 2.促进正确使用的方法包括接口的一致性,以及与内置类型的行为兼容. // 3.阻止误用的方法包括建立新类型.限制类型上的操作,束缚对象值,以及消除客户的资源管理责任. // 4.shared_ptr支持自定义删除器,可以方便的用于管理各种资源. //条款20:pass by reference to const 替换 pass by value //
1. 让自己习惯C++(Accustoming yourself to C++) 条款01: 视C++ 为一个语言联邦(View C++ as a federation of languages) 条款02: 尽量以const,enum,inline替换#define(Prefer consts,enums,and inlines to #define) 条款03: 尽可能使用const(Use const whenever possible) 条款04: 确定对象被使用前已先被初始化(Make
这个条款可以看成是条款24的续集,我们先简单回顾一下条款24,它说了为什么类似于operator *这样的重载运算符要定义成非成员函数(是为了保证混合乘法2*SomeRational或者SomeRational*2都可以通过编译,2不能同时进行隐式类型转换成某个Rational,再作this用). 所以我们一般将之定义成友元函数,像下面这样: class Rational { private: int numerator; int denominator; public: Rational(,
条款41:了解隐式接口和编译期多态 class支持显示接口和运行期多态 class的显示接口由函数的名签式构成(函数名称.参数类型.返回类型) class的多态通过virtual函数发生在运行期 template支持隐式接口和编译期多态 template的接口是隐式的,由具体的表达式决定 template的多态是通过其具现化和函数重载解析发生在编译期 //这里接口要求T必须实现operator >这个隐式接口 template<typename T> T max(T a, T b){ r