《Effective c++》学习笔记--Accustoming Yourself to C++

来源:互联网 发布:中华医典软件 编辑:程序博客网 时间:2024/06/06 19:16

Item 01 : View C++ as a federation of languages

C++语言联盟分成4部分 :

  1. C

  2. Object-Oriented C++
    封装,继承,多态,虚函数。。。

  3. Template C++ 这是C++泛型编程的部分

  4. 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++不保证初始化他们

例如:下面描述正确的是

  1. int *p1 = new int[10];
  2. int *p2 = new int10;

A. p1和p2申请的空间里面的值都是随机值
B. p1和p2申请的空间里的值都已经初始化
C. p1申请的空间里的值是随机值,p2申请的空间里的值已经初始化
D. p1申请的空间里的值已经初始化,p2申请的空间里的值是随机值

此题选C,对于内置类型,c++并不保证初始化,因此1中只是分配内存,而未初始化,而2中对其初始化为0。

2.构造函数最好用成员列表初始化,而不要在构造函数体内赋值操作

特别注意的一点就是,成员列表初始化的顺序应该和他在类中定义的顺序一致。

0 0
原创粉丝点击