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无类型,不可进行类型检查

const有作用域而#define不重视作用域,默认定义处到文件结尾,如果定义在指定作用域下的有效常量,那么#define就没办法使用