Effective C++读书笔记(2)

让自己习惯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。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值