const 的基本作用
const有且只有一种作用,那就是限定被修饰的对象无法被修改,在c++中,被const修饰的对象被看作常量,存储在只读存储区(.rodata)。
测试代码
const int a = 5;
char arr[a];
对测试代码进行汇编编译 – gcc -S test.c
const与指针
关于const与指针,我在指针一节中涉及到了,可以跳转下面的链接
2-17,18,19 – 关于指针
const限定
在很多函数中,我们用引用传递参数给目标函数做一些事,但是我们
并不希望目标函数去修改我们传递的这个值。
例如在字符串比较函数中
int strcmp(const char *str1, const char *str2);
既然只是做比较,那就不涉及修改参数的问题,但是为了避免,目标
函数出现修改参数的情况,加上const修饰参数就能避免如此问题。
链接性与作用域
链接性
在c++中由const修饰的变量默认是内部链接的,即只在本.c文件中可以被看到
如果想要使被修饰的变量具有外部链接性,就需要在外用extern修饰
而在c中,const修饰的变量默认是外部链接
同样的代码用c编译
可以看到用c编译的a是globl修饰的。
作用域
前文说过const修饰的变量存储被视为常量与常量一起存储在只读存储区
在只读存储区的内容不会随着函数结束而销毁,而是会一直保存到程序运行结束