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

[c++ primer plus]常用的const及const的语意

2007-10-22 14:52 260 查看

1. const int * p = &x;


2. int const * p = &x;


3. void class::function(const class& ref);


4. void class::function() const;


5. const class1 class2::function2();


6. const class2& class2::function2(const class2& ref);

前三种都比较熟悉;

第四种针对“常对象只能调用常成员函数”;

第五种仅针对“消除连环调用”,如:(class2.function2()).function1(),那么function1被执行的前提是:该函数也是const的。对于class2.function2()返回值送出去了的情况,该const限定符是没有意义的,如下:


const class1 cs1 = class2.function();


class1 cs1 = class2.function();

第六种针对语意,传入是const&,传出当然也是const&。const从语意上理解就是:只读;在定义(非声明)的时候就必须初使化;作用域在仅在文件。

1. const型形式参数与非const型形式参数,不能作为函数重载的特征标。

2. 返回值是const型与非const型,不能作为函数重载的特征标。

3. 成员函数对于类而言,是不是const型的,可以作为重载的特征标。

是否具备作为重载的特征标,要从语意上分析。


void func1(int* p)




...{


cout << *p << endl;


}




const int *p = &a;


int* p1 = p;


func1(p)


func1(p1);

6. 利用const在头文件中定义全局变量时,可以把这个头文件包含到多个其它.cpp文件中(可见,const的作用域仅限于单个cpp文件)。

7. 成员变量类型static const 、static、const的差别

static型为类共有,存储在对象之外。只能在类外初使化,不能在声明时初使化。这是因为被static声明的类静态数据成员,其实体远在main()函数开始之前就已经在全局数据段中诞生了(见《Inside The C++ Object Model》page247)!其生命期和类对象是异步的,(而且静态语意说明即使没有类实体的存在,其静态数据成员的实体也是存的)这个时候对象的生命期还没有开始,如果你要到类中去初始化类静态数据成员,让静态数据成员的初始化依赖于类的实体,,那怎么满足前述静态语意呢?难道类永远不被实例化,我们就永远不能访问到被初始化的静态数据成员吗? 所以为了满足C++的static语意,static成员一定要在类外初始化!

const型为对象所有。只能在构造函数中以列表方式初使化。

static const型为类共有。可以在类声明时初使化,因为其是const类型的,所以可以在类内初使化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: