const连接属性
c语言下
c语言下const默认是外部连接属性
也就是说我在1.c中的全局位置const了一个常量在2.c中也可以用
但是要先使用extern const int 常量名才行
c++下
const全局变量默认是内部连接属性
如果想要变成外部连接属性可以添加extern关键字来提高作用域把它变成外部连接属性
const分配内存情况
尽量使用const来代替define
对const变量取地址,会分配临时内存
但是这个临时的只能拿来用,并不能修改
使用普通变量初始化const变量
int a = 10
const int b = 1
int *p = (int *)&b;
*p = 1000;
只要是分配内存就可以修改
对于自定义数据类型
struct Person
{
string m_Name;
int m_Age;
}
void test()
{
const Person p;
Person *pp = (Person*)&p;
(*pp).m_Name = "Tom";
pp->m_Age = 10;
}
由于一开始只是const申明p但是后面的赋值还是在内存上,所以还是可以用间接赋值来修改
尽量用const来替换#define
因为#define的作用域不太规矩所以采用const更好
const有类型,可进行编译器类型安全检测而#define无类型,不可进行类型检查