目录
1.const含义
常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被修改的。
2.const作用
(1)定义常量
const int i = 66;
(2)类型检查
const常量与
#define
宏定义常量的区别:const常量具有类型,编译器可以进行安全检查;
#define宏定义没有数据类型,只是简单的字符串替换,不能进行安全检查。
const定义的变量只有类型为整数或枚举,且以常量表达式初始化时才能作为常量表达式,其他情况下它只是一个
const
限定的变量,切勿与常量混淆。
(3)防止修改,起保护作用,增加程序健壮性
错误的写法:
void foo(const int j)
{
j++;
}
(4) 可以节省空间,避免不必要的内存分配
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像
#define
一样给出的是立即数。const定义的常量在程序运行过程中只有一份拷贝,而#define
定义的常量在内存中有若干个拷贝。
3.const对象默认为文件局部变量
未被const修饰的变量在不同文件的访问
root@ubuntu-virtual-machine:/home/ubuntu/C++# g++ test1.cpp test2.cpp root@ubuntu-virtual-machine:/home/ubuntu/C++# ./a.out 7 root@ubuntu-virtual-machine:/home/ubuntu/C++# cat test*.cpp /*test1.cpp*/ int a = 6; /*test2.cpp*/ #include<iostream> extern int a; int main(){ std::cout<<(a+1)<<std::endl; }
const常量在不同文件的访问
root@ubuntu-virtual-machine:/home/ubuntu/C++# g++ ext_test1.cpp ext_test2.cpp root@ubuntu-virtual-machine:/home/ubuntu/C++# ./a.out 100 root@ubuntu-virtual-machine:/home/ubuntu/C++# cat ext_test*.cpp /*ext_test1.cpp*/ extern const int b = 100; /*ext_test2.cpp*/ #include<iostream> extern const int b; int main(){ std::cout<<b<<std::endl; }
4.定义常量
错误示例:
(1) x已被const限定,它的值不可更改。
const int x = 10;
x = 0;
(2) i 为常量,必须进行初始化,因为常量在定义后就不能被修改,所以定义时必须初始化。
const int i,j = 0;
总结:
非const变量默认为extern,未被const修饰的变量不需要extern显式声明;而要使const常量能够在其他文件中访问,const常量需要extern显式声明,并且需要做初始化,因为常量在定义后就不能被修改,所以定义时必须初始化。