您的位置:首页 > 编程语言 > C语言/C++

Effective C++读书笔记(2)

2013-12-16 15:48 183 查看
让自己习惯C++

条款1:视C++为一个语言联邦

C++可以看作是四种次语言组成的:

C(包括区块、语句、预处理器、内置数据类型、数组、指针等);

Object-Oriented C++(主要表现C++的面对对象的性质,包括类、封装、继承、多态性、virtual函数等);

Template C++(为C++泛型编程部分);

STL(是模版程序库,主要包括容器、迭代器、算法以及函数对象)。

条款2:尽量以const, enum, inline替换 #define(实用编译器代替预编译器)

问题:#define定义的宏不被视为语言的一部分,而其定义的记号名称也许没有进入记号表被编译器看到,追踪宏定义较麻烦。

解决方案:以常量替换#define(使用const关键字)

const double* cptr;//指向const对象的指针,不能通过该指针改变所指向地址的值,但可以改变指针所指的地址值,定义时不用初始化
double* const cptr;//const指针,指针的值无法改变,定义时必须初始化。在实际程序中指向const的指针常用作函数的形参,可用于防止函数对形参进行修改。
特殊情况:1、在头文件中定义指向const char*(c风格字符串)的常量指针时应写两次const(此时用String更合适)

const char* const anthorName="Scott Meyer";
const std::string authorName("Scott Meyer");2、定义类内专属常量时为保证只有一份实体需定义为static成员(此时体现了#define不具有封装性)

如果在class编译期间需要给class专属的常量值赋初值,但是旧式编译器不允许class成员在其声明式上获得初值,此时应采用“the enum hack”做法。其理论基础为:一个属于枚举类型的数可以权充int被使用。

static const int NumTurns = 5;
int score[NumTurns];

enum{NumTurns=5};
int score[NumTurns];"enum hack"的优点在于其行为在某些方面比const像#define。我们无法获得enum和#define的地址,但是我们可以获得const的地址。enum可以实现这种约束。

对于形似函数的宏,最好改用inline函数代替#define。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: