2010.11.28 thinkin in C++ 常量 笔记

来源:互联网 发布:淘宝金冠店铺值多少钱 编辑:程序博客网 时间:2024/05/17 21:45

常量的作用:

 

一、值替代

c中:

#define BUFSIZE 100

大多数情况,BUFSIZE的工作方式与普通变量类似;而且没有类型信息。这样就会隐藏一些很难发现的错误。

 

c++中:

const int bufsize =100;

 

常量折叠(constant folding),编译器在编译时可以通过必要的计算把一个复杂的常量表达式通过缩减简单化。这一点在

数组定义时显得尤其重要:

char buf[bufsize];

 

当定义一个const时,必须赋一个值给它,除非extern做出了清楚的说明:

extern const int bufsize;

 

通常C++编译器并不为const 创建存储空间,相反它把这个定义保存在它的符号表里。

 

如果想让一个值不变,就应该使之成为const:

1)为防止意外的更改提供安全措施

2)消除了读存储器和读内存操作,使编译器产生的代码更有效

const可以用于集合,但必须保证编译器不会复杂到把一个集合保存到它的符号表中,所以必须分配内存。

二、指针

指向const的指针:

const int* u;   -->"u是一个指针,它指向一个const int"

这里不需要初始化,因为u可以指向任何标识符(也就是说,它不是一个const),但它所指向的值是不会被改变的。

 

const指针:

int d = 1;

int* const w = & -->"w是一个指针,这个指针是指向int的const指针"

因为指针本身现在是const指针,编译器要求给它一个初值,这个值在指针生命周期内不变。然而要改变它所指向的值

是可以的。可以写:

*w =2;

 

可以把一个非const对象的地址赋给一个const指针

不能把一个const对象的地址赋给一个非const指针

三、函数参数和返回值

传递const值

 在函数里,const有这样的意义:参数不能改变。所以它其实是函数创建者的工具,而不是函数调用者的工具

 

返回const值

临时变量:它们自动的成为常量。

传递和返回地址

无论什么时候传递一个地址给一个函数,都应该尽可能用const修饰它。

 

四、类

类里的const

构造函数初始化列表

cosnt对像和成员函数