常量:值在运行时不变
C:#define定义宏常量
C++:可以用const定义常量
#define MAX 100 /* C 语言的宏常量 */
const int MAX = 100; // C++ 语言的 const
const和define区别:
const有数据类型,宏没有,编译器对const进行类型安全检查而只对宏常量进行字符替换
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define
一样给出的是立即数。
const定义的常量在程序运行过程中只有一份拷贝,而#define
定义的常量在内存中有若干个拷贝。
const的用法:
如果参数为指针且仅做输入,则在类型前加const,如void strcopy(char *dest, const char *src);
如果参数是以值的方式传递,则可以用“const &”以省去临时对象的构造和析构过程
如果const位于*
的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
如果const位于*
的右侧,const就是修饰指针本身,即指针本身是常量。
const数据不能在类的声明中被初始化,const只在某个对象生存期间是常量,对于整个类而言确是可变的,因为类可以创建多个对象,不同对象的const数据可以不同
因此在类中要用枚举常量实现恒定的常量,枚举常量不占用对象的存储空间,而是等到编译时才被全部求值。缺点是隐含数据类型为整数,不能表示浮点数。
例:
class A
{
enum {SIZE1 = 100, SIZE2 = 200};
int array[SIZE1];
}