目录
1.const含义
2.const作用
3.const对象默认为文件局部变量
4.定义常量
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显式声明,并且需要做初始化,因为常量在定义后就不能被修改,所以定义时必须初始化。
|