来源网址:http://wujiangping.blog.163.com/blog/static/195182011201255115125205/

请区别用#define命令定义的符号常量和用const定义的常变量。符号常量只是用一个符号代替一个字符串,在预编译时把所有符号常量替换所指定的字符串,它没有类型,在内存中并不存在以符号常量命名的存储单元。而常变量具有变量的特征,它具有类型,在内存中存在着以它命名的存储单元,可以用sizeof运算符测出其长度。与一般变量惟一的不同是指定变量的值不能改变。用#define命令定义符号常量是C语言所采用的方法,C++把它保留下来是为了和C兼容。C++的程序员一般喜欢用const定义常变量。虽然二者实现的方法不同,但从使用的角度看,可以认为用了一个标识符代表了一个常量。有些书上把用const定义的常变量也称为定义常量,但应该了解它和符号常量的区别。

const的用法

  1、C程序中的作用
    定义常量、修饰函数参数、修饰函数返回值
2、C++程序中特有的作用
        修饰函数的定义体;定义类中某个成员函数为恒态函数即不可改变类中的数据成员;
const和define的区别
  C++中const和define都可以定义常量,但是const有更多优点
(1)const常量有数据类型,而宏常量没有,编译器可以对const常量进行类型安全检查,而后者只进行字符替换没有安全检查,可能生意料不到的错误(边际效应)
(2)有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试,c++中使用const常量而不是宏常量,即const常量完全取代宏常量。
(3)const与#define最大的差别在于:
前者在堆栈分配了空间,而后者只是把具体数值直接传递到目标变量罢了。或者说,const的常量是一个Run-Time的概念,他在程序中确确实实的存在并可以被调用、传递。而#define常量则是一个Compile-Time概念,它的生命周期止于编译期:在实际程序中他只是一个常数、一个命令中的参数,没有实际的存在。 

const常量存在于程序的数据段,#define常量存在于程序的代码段。

转载于:https://www.cnblogs.com/tianxia2s/p/3858285.html

C++ 中 const和define的区别相关推荐

  1. C++编程中const和#define的区别

    (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用.(2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开. const常量有具 ...

  2. php中const和define,PHP中const和define的区别是什么

    PHP中const和define的区别是什么 发布时间:2020-09-10 10:14:36 来源:亿速云 阅读:65 作者:小新 PHP中const和define的区别是什么?这个问题可能是我们日 ...

  3. uniapp 获取到js文件var一个变量怎么获取到这个变量值_浅析Js中const,let,var的区别及作用域...

    理解:let变量的作用域只能在当前函数中 js中const,let,var的区别及作用域_lianzhang861的博客-CSDN博客​blog.csdn.net 全局作用域中,用 const 和 l ...

  4. C++中typedef和define的区别

    typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: ...

  5. php中const和static的区别和联系

    1.const是类中的常量,类外用define来定义常量 2.const只可以修饰类的属性,不能修饰类的方法,static可以修饰属性,也可以修饰方法 3.const和static都属于类本身,而不属 ...

  6. C#中const和readonly的区别

    C#引入了readonly修饰符来表示只读域,const来表示不变常量.顾名思义对只读域不能进行写操作,不变常量不能被修改,这两者到底有什么区别呢?只读域只能在初始化--声明初始化或构造器初始化--的 ...

  7. C# 中const和readonly的区别

    const 的概念就是一个包含不能修改的值的变量. 常数表达式是在编译时可被完全计算的表达式.因此不能从一个变量中提取的值来初始化常量. 如果 const int a = b+1;b是一个变量,显然不 ...

  8. const与define相比优点_const与#define的区别、优点

    const与#define的区别 编译器处理方式不同 define宏是在预处理阶段展开. 补充:预处理器根据以#开头的命令,修改原始的程序.比如我们常见的#include 命令告诉处理器读取系统头文件 ...

  9. C#中const和readonly有什么区别?

    C#中const和readonly什么区别? 您什么时候可以使用另一个? #1楼 常量成员是在编译时定义的,不能在运行时更改. 使用const关键字将const声明为字段,并且必须在声明const对其 ...

最新文章

  1. AngularJS学习总结
  2. 从JavaScript数组中获取随机项[重复]
  3. 深度学习-机器学习(5.1支持向量机)
  4. NIO Buffer
  5. MATLAB高光谱图像构建KNN图
  6. WPF 如何在代码中使用自定义的鼠标资源
  7. MySQL中的LIMIT 关键字
  8. EViews11.0程序安装及注意事项
  9. 中国互联网惊呆老外?微信大数据揭露“无现金”真相
  10. 都说程序员越老越“不值钱”,想避免未来也“被优化”,怎么办?
  11. 2019年新版新媒体运营学习路线,附完整视频+工具+运营经验
  12. 网吧部分机器耳麦line in线要重插一下才能说话的设置
  13. PostgreSQL实战之体系结构
  14. 西瓜微数独家解析: 干货管饱|帮你省XXX万广告费的KOL投放指南
  15. 基于数据指纹的增量式
  16. 9 个美观大气的后台管理系统
  17. STM32 StemWin 模拟器使用
  18. 全球与中国转底炉市场深度研究分析报告
  19. 揭示生命奥秘,促进疫苗研发,生物物理学有望掀起下一轮医学革命
  20. 字母大小写转换在线工具

热门文章

  1. Java线程组(ThreadGroup)使用
  2. 【DP、线段树优化】琪露诺
  3. RSEM-Ebseq-差异表达分析-无参
  4. Vue2.0 入门 安装Vue-cli
  5. 面试之BI-SQL--table转换
  6. 【转】系统管理类DOS命令汇总
  7. jQuery总体架构的理解
  8. 离2006年考研还有一个月
  9. python换成中文版_在python中如何将“\”替换为“/”?
  10. 【Paper】2020_Qize_Design of UGV Trajectory Tracking Controller in UGV-UAV Cooperation