Effective C++ 中文版(第三版)持续更新ing
导读部分
- 类中声明构造函数时,隐式类型转换非必要的时候,最好在构造函数开头加 explict,加了之后也是允许显式类型转换 。
class B
{
Explict B(int x=0;bool b=ture);
};
doSomething(B(10)) //发生显式类型转换,B的构造函数将int 显式转换
条款1 视c++为一个联邦
c语言的四个次语言:
- C
- Object—Oriented C++ :构造函数析构函数、封装、继承、多态、函数
- Template C++:泛型编程
- STL:template 程序库 ——容器、迭代器、算法、函数对象
条款2 尽量以const,enum,inline替换#define
-
对于单纯常量,最好以const对象或enums替换#defines -
对于形似函数的宏(macros),最好改用inline函数替换#defines
#define CALL_MAX(a,b) func((a)>(b)?(a):(b))
//改为
template<typename T>
Inline void callMax(const T&a,const T&b)
{
Func((a)>(b)?(a):(b));
}
条款3 尽可能使用const
- const出现在 char* 左边 表示被指物事常量,出现在char*右边表示指针自身是常量
const char* const p =
- const_iterator 可将stl模拟一个 const T* 指针。即被指物不可改变。
Vector<int>const_iterator it=
- 开头加const 的迭代器 即 迭代器本身不可改变
const Vector<int>iterator it=
const_cast<newtype> constexpression
//表示将const 转除,即 const 转为 non-const
注:new_type为目标数据类型,expression为原始数据类型变量或者表达式。
- const 函数不能设法去调用non—const函数,反过来调用 会避免代码重复
条款4 确定对象使用前已被初始化
|