1、字面常量
下面是一些字面常量:
float x=-100.5f;
#define OPEN_SUCCESS 0X000000001
char c='a';
char *ptr="I Love Andy";
int *pInt=NULL;
"="号后面的是字面常量,字面常量保存在程序的符号表里而不是在一般的数据区。符号表是只读的,它是一种访问保护机制,不可以取一个字面常量的地址
常量合并:相同的常量公用一个表符号。
2、符号常量
符号常量有两种:用#define顶一顶的宏常量和用const定义的常量
宏常量在编译之前就已经被替换为所代表的字面常量了,因此宏本质上是字面常量。
c++ 中基本数据类型的常量,编译器不会为其分配存储空间。
const常量的一些特性:
可以取一个cost符号常量的地址,对于基本类型的常量,编译器会重新在内存中创建它的一个拷贝,通过地址访问到的就是这个拷贝而非原始的符号常量;
而对于构造类型的数据常量,编译器会分配存储地址。
3、契约性常量
void ReadValue(const int &num)
{
cout<<num;
}
int main()
{
int n=0;
ReadValue(n);//契约性const,n被看做是const
}
4、枚举常量
枚举类型有局限性,一般用于整数常量
5、字符串常量的定义
如果一个常量字符串必须在.h文件中顶一顶的话,那么应该在.h中声明常量指针,在.cpp中定义并初始化。
对于多个文件中要用到的字符串常量尽量用extern声明:extern const char *name;