现在的位置: 首页 > 综合 > 正文

Effective C++学习笔记

2017年12月12日 ⁄ 综合 ⁄ 共 1102字 ⁄ 字号 评论关闭

1 C++是一个复合式的语言

C++中不同部分有着不同的语言特性,例如:

1.1 在C中传递形参时,按照值传递比按照指针传递效率更高

1.2 在面向对象程序中,对象要按照const引用而不是按照值传递

1.3 在STL编程中采取按照值传递方式

所以说C++中没有统一的准则,要按照不同的特性采取不同的使用方式,这也是为什么C++难的原因

2 尽量以const,enum,inline替换#define

2.1 const用法

2.1.1 以const替换#define。在声明常量时要用const替换#define,因为#define定义的常量,在有的编译器中不进入函数表,这样在编译的时候就可能出错

2.1.2 在类中使用静态的常量时,由于不同的编译器处理方法不同,因为没有统一的标准,在编译出错时,所以需要尝试不同的方法,有的在类中声明时初始化,在类外进行定义,有的类内部声明时不赋值,但是在类外定义时赋值。

  2.1.3 在重载=操作符时,要将返回类型声明成const,这样防止两个左值相加后,再被赋予另一个值

2.2 enum在类中用法

在类中如果要使用一个常量声明一个数组时,有的时候编译器不支持这么干,就要用枚举代替静态变量

2.3 inline用法

宏的使用带来了效率,但是有时候会让人误解,且会得到异常结果。inline函数在效率上不会比宏差,又容易理解其中所表达的计算逻辑,其是首选 

3 尽量使用const 

在重载运算符时要事返回的结果为const,作用是防止误操作a+b=c出现

4 在对象被使用之前被初始化

4.1 C++中C部分的特性和后扩展的特性不同,在C中为了保证性能,编译器不会对内置类型进行初始化,所以C中声明的数组就不是初始化为0,而在C++中的类型,如vector就被初始为0。所以C中的内置类型要手动初始化。

4.2 类在实例化时,构造函数中要使用函数的初始化列表,在此要分清赋值和初始化的概念,就知道赋值会导致性能低效,而初始化使得性能变高

5 了解C++类中默认函数

构造函数,析构函数,拷贝构造函数,拷贝赋值函数

6 若不想使用编译器默认生成的函数就应该明显拒绝

6.1 为了能将一个对象赋给另一个对象,需要实现拷贝构造函数和拷贝赋值构造函数

6.2 有时候又需要明显禁止对象被复制,将拷贝构造函数和拷贝复制构造函数声明为private,即可禁止对象的拷贝和赋值

7 为多态基类声明虚析构函数

7.1 如果基类中有虚函数存在,说明此基函数期待被继承的,就会出现多态性质,那么要求基类中的析构函数也要是虚的,这样用基类对象的指针释放继承对象时才不会发生“局部销毁”现象

7.2 如果不希望一个类成为基类,就不要在其中声明虚函数,因为声明虚函数会使性能下降






抱歉!评论已关闭.