const 用法
const ‘只读’
在C语言中,const 为只读修饰,其实是可以改变的量
-
const int maxn=10;
-
int array[maxn]; //error 错误,maxn仍是变量
C++
常量无地址概念,以’符号表‘形式;
-
key=a; value=1;
const int a=10;
// int *b=&a; [Error] invalid conversion from 'const int*' to 'int*' [-fpermissive]
int *b=(int*)&a;
//如果对常量取地址,编译器会临时开辟一空间(无法改变到a),让这个指针存放这临时空间的地址
几种形式const
const int a;
int const b; //等价
const int* c; //常量指针
int * const d; //指针常量
const int * const e;
-
顶层 const
-
const 指针
-
const 引用
-
const 函数体
- const { } 定义于函数体前
常量成员函数
定义格式; string myclass::sstring const { }
声明格式; string myclass::sstring const ;
2.void function()const;
define 与const对比
-
#define定义的宏是在预处理阶段进行替换的,const常量是在编译、运行阶段进行使用的(const 定义的常量依然是内置类型)。
-
define的替换注意是仅仅的字符串替换,并不会检查其合法性。
-
预处理阶段做了的任务:
1:将头文件中的内容(源文件之外的文件)插入到源文件中
2:进行了宏替换的过程(简单的字符串替换),定义和替换了由#define指令定义的符号
3:删除掉注释的过程,注释是不会带入到编译阶段
- 条件编译
所有的宏替换只是简单的字符串替换,注意是字符串替换,所以并不会检查其合法性,而const定义的常量依然是内置类型等,所以会对其进行类型安全检查。
宏定义在程序中使用了几次在预处理阶段就会被展开几次,并不会增加内存占用,但是宏定义每展开一次,代码的长度就要发生变化,而const常量也会为其分配内存。
而define定义的变量在内存中并没有拷贝,因为所有的预处理指令都在预处理时进行了替换。