Item 01 : View C++ as a federation of languages
C++语言联盟分成4部分 :
C
Object-Oriented C++
封装,继承,多态,虚函数。。。Template C++ 这是C++泛型编程的部分
STL C++标准模板库
什么时候使用传值:
对于内置类型(C-like)来说,传值比传引用高效,但是对于用户自定义的类型来说,传引用往往更好。
Item 02 : Prefer consts,enums,and inlines to # define.
用宏定义常量可能会使人疑惑,如定义:#define ASPECT_RATIO 1.653
可能ASPECT_RATIO从未被编译器看见,也许在预处理器处理是已经被替换了。
因此可以用const double AspectRatio=1.653
来代替,使用常量可能比使用宏导致较小的代码量。
Item 03 : Use const whenever possible
const 关键字的作用总结:
1. const “保护”变量不被修改。
const int x=5; //x为常量不能被修改 const greeting[]=”hello”;
char*p=greeting; //non-const pointer,non-const data const
char* p=greeting; //non-const pointer,const data char*
const=greeting; //const pointer,non-const data const char*
const p=greeting; //const pointer,const data;
2. const 修饰函数形参
当输入参数为用户自定义类型和抽象数据类型,应将值传递改为const &
传递,提高效率
3. const 修饰类的成员函数
int get() const; //不会修改数据成员
const成员函数承诺不改变其对象的逻辑状态,non-const成员函数没有这般的承诺,如果在const函索内调用non-const成员函数,就会有风险。
因此,在const成员函数内不要调用non-const成员函数。
4. 函数的返回值为const
可以避免那些没有道理的,与固定类型不兼容的行为。
Item 04 : Make sure that objects are intialized before they are used
1. 对于内置的对象进行手工初始化,c++不保证初始化他们
例如:下面描述正确的是
- int *p1 = new int[10];
- int *p2 = new int10;
A. p1和p2申请的空间里面的值都是随机值
B. p1和p2申请的空间里的值都已经初始化
C. p1申请的空间里的值是随机值,p2申请的空间里的值已经初始化
D. p1申请的空间里的值已经初始化,p2申请的空间里的值是随机值
此题选C,对于内置类型,c++并不保证初始化,因此1中只是分配内存,而未初始化,而2中对其初始化为0。
2.构造函数最好用成员列表初始化,而不要在构造函数体内赋值操作
特别注意的一点就是,成员列表初始化的顺序应该和他在类中定义的顺序一致。