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

effective c++ 之代替#define

2014-02-17 22:01 239 查看

条款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:引用和指针的区别
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: