C++编程思想学习笔记-常量
一、全局范围的const使用
1、const的使用有两种效果,一是生成编译期常量,二是运行期常量。
做为编译期常量主要用作值替代,即取代C中的#define常量定义,一般用于设置数组大小。
此时不分配存储空间,只在有extern限定或取地址时才会分配空间。
做为运行期常量主要控制程序的安全性,它们会被分配空间,但一经初始化就不能再改变,
数组,结构等集合始终是运行期常量,不能当做编译期常量使用,例如不能用于设置数组大小。
另外C中的const只是运行期常量。
2、const对指针的使用
指向const的指针 const int* x,int const* x;
const指针 int* const x;
注意:关于赋值,不能把const指针(引用)赋给非const指针(引用)(会通过非const指针改
变const指针指向的值!),但可以把非const指针(引用)赋给const指针(引用)。这是基于
安全的考虑。
3、const用于函数参数与返回值
参数做为const值一般作为函数中的一个初始值;但一般如下使用更易理解:
void f(int ic)
{
const int& i=ic;
//others
}
参数做为const指针或引用是基于安全与效率的原因;并且一般不改变参数的函数,参数要用
const int* cip或const int& ci;这样的函数可const和非const参数,若函数参数没有const
修饰则只能接受非const参数,不能接受const参数,不具有通用性,所以记住如下用法:
void f(const int& ic)
{}
注意:所有临时变量都是常量;
返回值做为const值时表明此返回值不能做为左值或修改,一般用于用户自定义类,对于内部
数据无意义。
返回值做为const指针时要注意接受返回值的变量要为const所修饰。
二、类内部的const使用
1、类内部const的含义-它在每个类对象里分配存储空间,且一旦初始化后就不能改变(运行期常
量),它要在构造函数的初始化表中初始化。
2、要想在类内部使用编译期常量,可以使用enum枚举;它不会占用存储空间。
3、const用于成员函数-表明此类函数不会改变对象的数据,能被const对象所调用(const对象只
能调用const成员函数)但若想在const成员函数中改变数据,有两种方法:
1>通过this指针把const变量强制转换为非const的。
2>用mutable修饰要改变的变量。
推荐使用2>。
三、volatile的使用
表示此数据可以被改变--用于编译器对此数据的优化假定,当编译器读取此数据时会认为它已
被改变会再次读取到寄存器中,不会假定它没变从而直接使用寄存器的值。
const volatile表示这个对象不能被程序员改变,但可以通过外面的工具改变(?不懂)。
posted on 2006-03-24 22:15
乘风破浪小树叶 阅读(884)
评论(2) 编辑 收藏 引用 所属分类:
C++读书笔记