Effective C++ 随笔(1)

条款一 c++ 为一个语言联邦

1、四个层次 C:blocks,语句,预处理器,内置数据类型,数组,指针

面向对象的C++:封装,多态,继承

Template C++

STL

条款二 尽量以const,enum,inline代替#define

Static const

常量的声明和定义,声明应该是在头文件当中,定义是在实现文件当中。对于基本类型需要一个类似赋值的语句,例如:

const double classname::membername = 12;

但是对于对象的定义使用下面的方式 class classone{};

const classone classname::class1;

这点实际上和java非常不一样,在java当中这只是意味着进行了声明,初始化需要new出对象来,但是这里已经进行了初始化,而且此处使用默认的构造函数

条款三 尽可能使用const

1、const 常量的定义

const char * pointer 表示const的data,但是指针可以变化

char * const pointer 表示const的指针,但是指针指向的data可以变化

const char * const pointer 表示data和指针都是不能变化的

总结:在星号之后表示指针式const,在星号之前表示data是const

2、const 在函数定义当中的使用

const 成员函数

class classname{ 

private:  string functionname() const; 

};

此处表示functionname成员函数不能修改类的数据成员

const参数

string function (const string & str);

此处表示function不可以修改str

条款4 确定对象被使用前已经被初始化

c++规定对象的成员变量的初始化在进入构造函数本体之前,在构造函数中进行的都不是初始化,而是赋值操作。在这之前有一个defaut构造函数被自动调用的过程 因此实际上default构造函数的构造全部作废。

可以使用初始化列表

这不仅是为了提高效率,有时也是必须的,比如类成员的成员变量如果为const类型则在声明时就应该进行初始化,若为default的方式是会出错的,需要使用初始化列表,来对其定义

上一篇:linux kill信号列表


下一篇:Microsoft .NET Pet Shop 4: Migrating an ASP.NET 1.1 Application to 2.0