const的作用:
1.定义常量,具有不可变性;
2.便于进行类型检查,使编译器对处理内容有更多的了解,消除了一些隐患。
3.避免意义模糊的数字出现,便于进行参数的调整修改。
4.可以保护被修饰的东西,防止意外修改,增强程序的健壮性。
5.可以节省空间,避免不必要的内存分配。
6.提高效率,存在符号表中,没有储存和读内存的操作。
C语言中const默认外部链接,C++默认内部链接
C语言:
test.c
const int a = 10;//C语言中默认const外部链接
main.c
extern const int a;
printf("a=%d\n",a);
C++中:
test.cpp
const int a = 10;//C++中默认const内部链接
extern const int a = 10;//extern提高作用域后就可以
main.c
extern const int a;//无法解析外部变量
const 分配内存情况
1.const分配内存,取地址会分配临时内存
void test01(){
const int m_A=10;
int *p=(int *)&m_A;//会分配内存
}
2.extern编译器也会给const变量分配内存
3.用普通变量初始化const的变量
void test02(){
int a=10;
const int b=a;//会分配内存就可以改const的值
int *p=(int *)&b;
*p=1000;
cout<<"b="<<b<<endl;//1000
}
4.自定义数据类型 加const也会分配内存
strut Person{
string m_Name;//姓名
int m_Age;
}
void test03(){
const Person p1;
p1.m_Name="德玛西亚";//这样修改不允许
Person * p=(Person *)&p1;
p->name="德玛西亚";
(*p).m_Age=18;
cout<<"Name:"<<p1.m_Name<<" Age:"<<p1.m_Age<<endl;
}
--------------------------------------------------------
尽量用const替代#define
宏定义的变量从未被编译器看到过,因为在预处理阶段已经将宏替代。宏定义没有类型,没有作用域。
#define max 1024
const int max=1024;