effective c++ 之代替#define

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

1、C:blocks\statements\preprocessor\built_in data types\array\pointerObject-oriented c++,

2、c with classes:class,encapsulation,inheritance,polymorphism,virtualfunction(动态绑定)。。。

3、Template C++:generic programming 的一部分,良好的守则,唯template适用。

4、STL,是个template程序库,containers,iterators,algorithms,functions objects


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

用#define的坏处

1、无法追踪错误,

#define ASPECT_RATION 1.635

错误信息会提示1.635

解决之道,const double AspectRation =1.635;

2、编译器会盲目的替换为1.635导致目标代码出现多分1.635,改用变量只存在一份。

3、两种特殊的情况需要说明

3.1 常量指针,由于常量定义式,通常被放在头文件之内,有必要将指针(而不是指针所指的数据)声明为const,

const std::string authorname("swfa1");

3.2 class的专属常量,为了将作用域scope限定在class范围内,必须要让他成为class的一个成员(member)而为确保此常量最多只有一个实体,必须将它声明为static

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


以上是声明式,如果需要,。可以有以下定义式,但是一般情况只要不使用地址,就不需要定义式。

const int GamePlayer::NumTurns;//NumTurns 定义

这个式子在.cpp中出现。

#define不能创建一个class范围内的专属变量。除非#udef

enum 不能取地址,const可以,#define不可。

inline函数:

http://www.cplusplus.com/articles/G3wTURfi/


条款三:尽可能使用const

const:告诉编译器这个变量是不可改变的。约束

const * 是指针常量,指针是常量

*const 是指向常量的指针。被指物是常量

http://xinklabi.iteye.com/blog/653643:引用和指针的区别













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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值