欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Effective C++ --- 让自己习惯C++

程序员文章站 2022-06-15 20:25:55
...

1、视C++为一个语言联邦

C++已经是个多重范型编程语言,一个同时支持过程形式、面向对象形式、函数形式、泛型形式、元编程形式的语言

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

宏一般来说不能进行调试,看不到符号体系,给调试带来困难

class GamePlayer {
    private:
        static const int NumTurns = 5; // 常量声明式
        int scores[NumTurns];          // 使用该常量
};

const int GamePalyer::NumTurns;        // NumTurns的定义

还可以使用“enum hack”

class GamePlayer {
    private:
        enum {NumTurns = 5};           // 这样让NumTurns 成为了5的一个记号名称
        int scores[NumTurns];          // 使用该常量
};

利用inline函数或者inline的模板函数替换宏函数

template<typename T>
inline T callMax(const T& a, const T& b)
{
	return a > b ? a : b;
}

对于单纯常量,最好以const对象或enums替换#defines

对于形式函数的宏,最好改用inline函数替换#defines

3、尽可能使用const

const语法虽然变化多端,但并不莫测高深,如果关键字出现在*左侧,表示被指物是常量;如果出现在*右边,表示指针自身是常量;如果出现在*两边,表示被指物和指针两者都是常量

将const实施于成员函数的目的,是为了确认该成员函数可作用于const对象身上。这一类成员函数之所以重要,基于两个理由。第一,它们是class接口比较容易被理解。这是因为,得知哪个函数可以改动对象内容而哪个函数不行。第二,它们是操作const对象成为可能。成员函数的const性可以用来表示重载,因为操作对象不同。

有些情况下可以结合mutable来改变 bitwise constness

----将某些东西声明为const可帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本地

---- 编译器强制实施 bitwise constness,但你编写程序时应该使用“概念上的常量性”

---- 当const 和 non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复

4、确定对象用前已经先被初始化

----为内置类型对象进行手工初始化,因为C++不保证初始化它们

----构造函数最好用成员初始化列表,而不要在构造函数本体内使用赋值操作。初值列出的成员变量,其排序次序应该和它们在class的声明次序相同

---- 为免除“夸编译单元之初始化次序”问题,请以local static对象替换non-local static对象

相关标签: 工作心得 c++