首页 > 其他分享 >条款02:尽量使用const、enum、inline替换define

条款02:尽量使用const、enum、inline替换define

时间:2023-06-22 10:44:06浏览次数:33  
标签:02 开销 const 常量 enum inline 替换 define

文中说用enum代替define,只能说算是define在定义常量时的一种替代品,不能说明两者有何优劣。所以重点还是在const和inline vs define。

const vs define: 为什么建议用const而非define?

  1. define定义常量的局限性:
    • 符号是否在编译器可见。define定义的常量在预处理阶段进行宏替换,符号在编译期将不可见。而const常量会在编译期进行类型检查、链接,相关符号存储在符号表中。
  2. const产生的额外开销很小:
    • 首先说内存占用方面,const常量需要为其分配一个对象内存。当然,如果没有指针或引用对其进行解引用操作,优秀的编译器可以不为其分配内存。
    • 访问开销。编译器会采用常量传播进行代码优化,即将const常量替换为具体的数值,这一点和define相似,没有额外的访问开销。

inline vs define: 为什么建议用inline而非define?

  1. 宏函数的问题。
    • 每个符号都必须用括号括起来;
    • 通过表达式传递可能会引起变量重复核算。具体示例如下:
#define MAX(a,b) (a)>=(b)?(a):(b)

a = 0, b = 1
MAX(++a,++b)  // b将被核算两次
  1. inline产生的额外开销。一般对于短小的inline函数会在编译期进行内联展开,不会产生额外的函数调用开销。

经验准则

  1. 对于单纯常量,最好是以const对象或者enums替换#define。
  2. 对于形似函数的宏(macros)最好改用inline函数替换#define

标签:02,开销,const,常量,enum,inline,替换,define
From: https://www.cnblogs.com/nlihao/p/17447051.html

相关文章

  • 【金三银四】2022Android面经新鲜出炉啦
    前言春水初盛,垂钓者络绎不绝,鱼儿按捺不住,拍打着尾鳍纷纷跃出水面,沽个好价。本篇真实的记录了我从准备->复习->面试的全过程,分享一些我的真实经验,希望能帮到大家。准备工作开始准备工作之前,首先思考几个问题:如何准备需要复习哪些东西该怎么复习怎么复习最高效职业规划如何准备,从哪......
  • 2023.6.21 鲜花
    最近总是回忆起许多初中时的事情。记得当时和hyj做同桌的时候,经常被hyj,hrq和cym带着卷;经常下午cym会带一个零食,然后我们4个上课分着吃;还有在初三全班大部分人都pj1=的时候我们4个全部2=,很有趣很有趣。还记得当时老师准备重新安排座位的时候我竟然还满怀期待,后来......
  • Kali Linux 2023.2为Xfce版带来PipeWire支持
    Kali Linux 2023.2为Xfce版带来PipeWire支持,彻底改造i3桌面,这个版本还引入了一个新的Hyper-VVM镜像,以及几个新的黑客工具。OffensiveSecurity宣布了他们流行的道德黑客和渗透测试GNU/Linux发行版的新版本,带来了新的功能,更新和新的工具,以及许多改进,KaliLinux2023.2。......
  • Kali Linux 2023.2为Xfce版带来PipeWire支持
    Kali Linux 2023.2为Xfce版带来PipeWire支持,彻底改造i3桌面,这个版本还引入了一个新的Hyper-VVM镜像,以及几个新的黑客工具。OffensiveSecurity宣布了他们流行的道德黑客和渗透测试GNU/Linux发行版的新版本,带来了新的功能,更新和新的工具,以及许多改进,KaliLinux2023.2。......
  • Kali Linux 2023.2为Xfce版带来PipeWire支持
    Kali Linux 2023.2为Xfce版带来PipeWire支持,彻底改造i3桌面,这个版本还引入了一个新的Hyper-VVM镜像,以及几个新的黑客工具。OffensiveSecurity宣布了他们流行的道德黑客和渗透测试GNU/Linux发行版的新版本,带来了新的功能,更新和新的工具,以及许多改进,KaliLinux2023.2。......
  • 2023 math
    已知集合\(M=\left\{-2,-1,0,1,2\right\}\),\(N=\left\{x\left|x^{2}-x-6\geq0\right.\right\},\)则\(M\capN=\)A.\(\{-2,-1,0,1\}\)B.\(\{0,1,2\}\)C.\(\{-2\}\)D.22.已知\(z=\frac{1-i}{2+2i}\),则\(z-\overline{z}=\)A.-iB.i......
  • 20230621下午面试题
    1.数据库了解那些?2.docker了解吗?3.今后的职业规划?4.能不能写方案?5.在项目中担当的角色?6.想考那些证书?7.籍贯?空缺期?有无女朋友?住哪里?8.有什么想问我的吗?9.最低接受的薪资是?10.最快到岗时间?   xiaozimashuke......
  • 「Solution Set」JOISC 2022
    Day1监狱首先我们感性理解:每名囚犯一定是依次走到自己的目的地的。因为如果起点或终点挡着别人的路,让他先走到目的地就行了。而在中间的话还容易挡着别人的路。所以如果一个人的起点在另一个人的路径上,那么这个人必须先走,如果一个人的终点在别人的路径上,那么这个人必须后走。......
  • P5025 SNOI2017 炸弹
    P5025SNOI2017炸弹不难看出本题是可以转化为图论模型的:建立\(n\)个点代表\(n\)个炸弹,如果第\(i\)个炸弹能直接引爆第\(j\)个炸弹,就连边\(i\toj\)。这样的图论模型很好地刻画了原题中引爆的传递性,题意中第\(i\)个炸弹能直接/间接引爆第\(j\)个炸弹直接等价于......
  • 2021最新深度学习自然语言处理模型及原理细节汇编
        本简书整理了基于深度学习模型的自然语言处理(NLP)的模型研究的最新趋势。它涵盖了深度学习模型(如递归神经网络(RNN),卷积神经网络(CNN)和强化学习)背后的理论描述和实现细节,用于解决各种NLP任务和应用常见。本简书包含NLP任务(例如机器翻译,问题解答和对话系统)的最新研究进展。  ......