C++进阶—>const和define机制剖析
2017-10-11 14:18
309 查看
C++中的const和define
1 const基础知识(用法、含义、好处)
初级理解:const是定义常量==》const意味着只读 const int a; int const b; const int *c; int * const d; const int * const e ; |
含义: //第一个第二个意思一样 代表一个常整形数 //第三个 c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改) //第四个 d 常指针(指针变量不能被修改,但是它所指向内存空间可以被修改) //第五个 e一个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改) |
const好处 //合理的利用const, //1.指针做函数参数,可以有效的提高代码可读性,减少bug; //2.清楚的分清参数的输入和输出特性 |
int setTeacher_err( const Teacher *p) Const修改形参的时候,在利用形参不能修改指针所向的内存空间,即指针所指内存空间中的数据不能被修改 保证了内存空间中数据的安全性,避免多个指向该内存空间的指针对该内存空间中的数据不断的被修改导致程序错误,保证了数据的互斥性。 |
2 C++中const运行机制
int main() { const int a = 10; int *p = (int*)&a; printf("a===>%d\n", a); *p = 11; printf("a===>%d\n", a); return 0; } |
C++编译器对const常量的处理: 当碰见常量声明时,C++编译器会将所有的const常量以(key,value)的形式存储在符号表中,此符号表用户无法操作,仅可取地址; 编译过程中若发现使用常量则直接以符号表中的值替换,如上述代码a=10,在程序中遇到a直接将其替换为10; 编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间(分配的存储空间有别于符号表空间,是单独分配出来用户可操作的存储空间) |
注意: C++编译器虽然可能为const常量分配空间,但不会使用其存储空间中的值。 |
结论: 1.C语言中const变量是只读变量,有自己的存储空间 2.C++中的const常量可能分配存储空间,也可能不分配存储空间 当const常量为全局,并且需要在其它文件中使用,需要分配存储空间 当使用&操作符取const常量的地址,需要分配存储空间 |
3 #define基础知识
void fun1() { #define a 10 const int b = 20; //#undef a # undef //若不让define具有全局性,则在后加上undef注销所有定义的常量,undef a 仅仅注销a常量。 } void fun2() { printf("a = %d\n", a); printf("b = %d\n", b); } int main() { fun1(); fun2(); return 0; } |
#define的含义与const相同,都是定义常量,只是define定义的为全局型常量,const定义的常量有作用域 |
4 const和#define区别
对比: 1. C++中的const常量类似于宏定义 const int c = 5; ≈ #define c 5 2.C++中的const常量与宏定义不同 const常量是由编译器处理的,提供类型检查和作用域检查,并可根据对常量的使用情况分配存储空间 宏定义(define)由预处理器处理,单纯的文本替换 |
|
相关文章推荐
- C++进阶—>const、define和enum的区别和用途
- 「C++」条款02 & 03:#define & const
- C++进阶—>线程同步随笔
- C++进阶—>_beginthreadex和CreateThread的区别和联系
- C++菜鸟进阶——>关于重载、隐藏和重写
- C++中const的实现机制深入分析
- quick-cocos2d-x的热更新机制实现<三>Updater(C++)
- 对C++中类型显示转换操作符const_cast<类型>(变量)的认识
- <<Effective c++>>读书笔记---条款20:宁以pass-by-reference-to-const替换pass-by-value
- C/C++中const的实现机制
- <二> c++之const
- <C++> dynamic_cast、const_cast、static_cast、reinterpret_cast总结
- C/C++关键字static,const,inline,define,typedef
- C++ 中的 delete[] 机制剖析
- C/C++关键字static,const,inline,define,typedef
- C++进阶—>函数重载、重写、重定义的区别
- C++进阶—>C++内存管理
- C++中define与const的区别
- C++进阶—>线程同步的四种方式
- C++中的const和define详解