C++学习4:宏定义#define与常量const
来源:互联网 发布:php 视频断点续传 编辑:程序博客网 时间:2024/06/08 14:14
今天在看C++ Primer Plus时,看到其中说到常量定义时,使用const要优于#define,解释的有些模糊,从网上找到了资料来详细的学习一下。
这位大神总结的很好,一起膜拜学习。
http://blog.csdn.net/love_gaohz/article/details/7567856
1. const
用于定义常量数据类型,通过const定义的变量不能被修改。
对于普通数据类型,有两种写法,效果相同:
const int A = 1;int const A = 1;
对于指针类型,需要注意,存在三种形式,最后一种效果不同:
const int *p = #; //*p不能被修改,p能被修改,即指向的内存空间内容不能被修改,指针的指向可以修改int const *p = #; //*p不能被修改,p能被修改,同第一种int *const p = #; //*p能被修改,p不能被修改,即指针的指向不能被修改,指向的内存空间内存可以被修改。
2. #define
宏定义,用于替换表示。
最常见的就是定义常量:
#define N 1000
和const int N = 1000,效果相同。因此这一点与const存在交集,需要对比的也就是这一点。
还可以定义函数:
#define max(x,y) (x)>(y)?(x):(y);
另外一个重要用途是条件编译:
#define 宏名 宏体 #ifdef 宏名 程序段1 #else 程序段2 #endif
条件编译可以缩小应用程序的大小,同时可以防止变量重定义和头文件同福包含和编辑。
3. const和#define在定义常量时的区别
1.编译器处理方式不同:
#define在预处理阶段进行处理。
const在编译阶段进行处理。
2.类型不同:
#define没有定义类型,只是简单的字符串替换,不进行任何的检查。
const常量有具体的类型,要进行类型检查。
3.存储方式不同:
#define在预编译中就已经替换了,因此不分配内存,仅仅是展开。#define实际就是给出了立即数,在运行过程中,常量在内存中会有若干个拷贝。
const常量会在内存中分配,可以使堆中也可以是栈中。以后在定义的常量调用时,只是使用对应的内存地址,不再开辟新的空间,在内存中只有一个拷贝,因此const相比#define,可以避免反复分配内存,节省空间。
#define PI 3.14159 //常量宏 const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 ...... double i=Pi; //此时为Pi分配内存,以后不再分配! double I=PI; //编译期间进行宏替换,分配内存 double j=Pi; //没有内存分配 double J=PI; //再进行宏替换,又一次分配内存!
0 0
- C++学习4:宏定义#define与常量const
- C/C++: const常量与define宏定义的区别
- C/C++中define定义的常量与const常量
- C/C++定义常量#define与const比较
- C/C++定义常量#define与const比较
- 浅尝C++——const与#define定义符号常量
- C++编程:const常量与define宏定义的区别
- const常量与define宏定义的区别
- const常量与define宏定义的区别
- const常量与define宏定义的区别
- const常量与define宏定义的区别
- const常量与define宏定义的区别
- const常量与define宏定义的区别
- const常量与define宏定义的区别
- const常量与define宏定义的区别
- const常量与define宏定义的区别
- const常量与define宏定义的区别
- const常量与define宏定义的区别
- 对UGUI的GridLayoutGroup组件进行拓展
- Python核心编程---读书笔记:第7章~第13章
- 索引设计的一些原则
- MFC modBus 读写串口实例
- 字符串转为整数或浮点数
- C++学习4:宏定义#define与常量const
- 团体程序设计天梯赛-练习集 L3-011. 直捣黄龙 最短路 dijkstra 解题报告
- TypeScript设计模式之备忘录、命令
- 杂项事务处理时,报错:事务处理日期不能是过去日期
- 保密通信协议
- Poj3264: Balanced Lineup—题解+st表解释
- 简要描述mybatis插件实现分页
- ZCMU—1894
- Median of two sorted array