概念
const修饰符是C++用于替代define的一个关键字,即用于定义一个常量。
一般格式
const 数据类型标识符 常数名 = 常量值;
或
数据类型标识符 const 常数名 = 常量值;
例:
const int HUMAN = 1;
采用这种方式定义的常量是类型化的,它有地址,可以用指针指向这个值,但是不能修改它。
说明:
1、const必须放在被修饰类型符和类型名前面
2、常量一但被建立,在程序任何地方都不能改!
3、数据类型是可选项,如果省略了,那么编译程序认为它是int类型。
例:
const int a =10;
等价于
const a =10;
4、const作用与#define相似,但它消除了#define的不安全性。
例:
#include"iostream.h"
main()
{
int a = 1;
#define T1 a+a
#define T2 T1-T1
cout<<"T2 is "<<T2<<endl;
return 0;}
这里输出的结果是T2 is 2
稍有不慎就会算错,所以用#define语句是不够安全的。如果用const代替这里的#define,就能避免#define这种反人类的算法。
5、const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。
6、函数参数也能用const说明,用于保证实参在该函数内部不被改动,大多数C++编译器能对具有const参数的函数进行更好的代码优化。
const与指针一起使用:
const定义的常数是有内存地址的,所以也会有指针。这里有三个易混的概念:“指向常量的指针”、“常指针”、“指向常量的常指针”
- 指向常量的指针就是指那个指向const定义的常量所在地址的指针,比如const char* pc = “abcd”(注意*号的位置)
- 常指针是指:把指针本身,而不是它指向的对象声明为常量。(常指针不一定指向常量)例:
char*const pc =“abcd”;(注意*号位置)
**(这时这个指针本身是一个常量,不能移动,但其指向地址内的值是可以改变的。) - 指向常量的常指针就是把二者结合起来,其指针不能变,指针指向的值也不能变:
const char * const pc=“abcd”;