第七章 常量
关键字 const 最初动机是代替 #define 进行值代替,之后被用于指针,函数参数,返回类型,类成员变量与成员函数。
1、值代替
const bufsize=100; 或 const int bufsize=100;
使用用 #define:
#define BUFSIZE 100
C++ 中 const 对变量产生的影响:
1)在尽可能的情况下不为其分配内存,而是存在符号表中,编译时会进行常量折叠;
1、extern 修饰;
2、使用 const 变量的地址;
3、const 变量过于复杂;
4、const 变量在编译期间值是未知;
以上几种情况,编译器将为 const 变量分配内存;
2)默认连接为内部连接;
3)表示编译期间常量或不能改变的一块存储:
1、编译期间不知其值;
2、用于集合时,其值不可在编译期间求出,所以表示不能改变的一块存储;
C++中 const 修饰指针:
1)修饰指针指向的对象,对象为不可改变的:const void* p | void const *p;
2)修饰指针内存储的地址,该地址不可改变:void * const p;
串字面值:
char *p="hello";
??????
C++ 中 const 修饰函数参数与返回类型:
函数参数传入一个临时变量或返回值是一个临时变量时,使用常量引用在语法上看起来像值传递,提供效率。
C++ 中 const 在类中的使用:
1)类声明的 const 变量不可以编译期间常量,初始化工作需要在构造函数中实现。
2)对于常量对象,引入 const 成员函数,常量对象只可调用 const 成员函数,保证常量对象不被改变。
const 成员函数声明
void fun(void) const;
按位与按成员 const
const 成员函数需要改变对象中的数据时,有两种方式:
1)将 “this" 强制转化成非 const;
2)使用 mutable 关键字,指定数据成员可被 const 成员函数改变;
volatile 关键字意思是可变的,语法上与 const 一样。含义相反。