让自己习惯c++
试c++为一个语言联邦
c++是c的拓展,最大的区别就是c++在c的基础上有了封装,继承和多态,但是c++里面不仅仅包含了
这个,还有模板,STL,都是非常重要的。
尽量以const,enum,inline 替换 #define
#define的解析在预处理阶段,而const,enum,inline的则是在编译阶段。#define并不真正属于语言
的一部分。
以这个宏为例:
#define ASPECT_PATIO 1.653
1.在预处理阶段,ASPECT_PATIO就被替换掉了,所以在编译阶段,并不能看到关于ASPECT_PATIO的信息
2.ASPECT_PATIO在程序中被使用的多次,都被替换成1.653可能会出现多份1.653而使用const常量只会有一个。
用宏来声明函数会导致一些不法预见的后果。以为宏只会简单替换不会去计算参数的值然后传入。
在c++中,最好使用inline函数来替换掉这个的宏函数。
尽可能使用const
1 | char greeting[] = "hello"; |
如果const出现在星号左边,表示被指物是常量,如果const在星号右边,表示指针本身是常量。
令函数返回一个常量值,往往可以降低因客户端错误而造成的意外,而又不至于放弃安全性和高效性。
如果成员函数如果只有常量性不同,可以被重载。
当const和non-const成员函数有着实质等价的实现时,直接令non-const版本调用const版本来避免代码重复
确定对象被使用前已先被初始化
为内置型对象进行手工初始化,因为c++不保证初始化他们
尽量使用初始化列表来对成员变量进行初始化,而不要在构造函数里面,使用初始化列表只需要调用
一次拷贝构造,而在构造函数里面,成员对象需要先初始化,然后进行赋值运算。
成员初始化的顺序只与生命顺序有关和初始化列表顺序无关。
为了免除”跨编译器单元之初始化次序”,以local static对象替换non-local-static