首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Define与Const的使用(3)

Define与Const的使用(3)

网上有关于C++这两个关键字的说明,看文章格式格式应该是来自于C++的一个本书中的,感觉写的相当详细:

因为C++和OC本来就是来自于C所以这里可以直接参考的。

其中本人筛选了其中比较重要的一些比较,是有利于解决本文的初衷问题的:

    const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝(因为是全局的只读变量,存在静态区),而 #define定义的常量在内存中有若干个拷贝
    归纳为:使用const定义常量比较好,因为省内存空间
    提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高
    归纳为:使用const定义常量比较好,因为效率高
    宏替换只作替换,不做计算,不做表达式求解;
    宏预编译时就替换了,程序运行时,并不分配内存。
    归纳为:宏定义 定义函数式比较好,因为省内存
    还有这一段:

const 与 #define的比较

     C++ 语言可以用const来定义常量,也可以用
    #define来定义常量。但是前者比后者有更多的优点:

(1) const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。

(2) 有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。

l 【规则5-2-1】在C++ 程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。
归纳为:const就是比宏牛逼!!!!!(哈哈 常量来说,并不是宏就没用了)

    总结问题答案

看到这里问题的答案其实已经很清楚了,而且也解决了这个问题之外的一些问题的答案,让我对C++和内存优化问题上有了进一步的了解!!!

     专业总结一万年
     const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们
    使用const常量。

编译时刻:宏是预编译(编译之前处理),const是编译阶段。
编译检查:宏不做检查,不会报编译错误,只是替换,const会编译检查,会报编译错误。
宏的好处:宏能定义一些函数,方法。 const不能。
宏的坏处:使用大量宏,容易造成编译时间久,每次都需要重新替换。
返回列表