首页 > 其他分享 >条款02: 尽量以const,enum,inline 替换 #define

条款02: 尽量以const,enum,inline 替换 #define

时间:2024-09-07 10:14:50浏览次数:1  
标签:02 const ++ void enum int template inline

  • 宏实现

1. 宏定义有可能从未被编译器看到,找不到宏定义

2. 宏有可能存在多份

#define ASPECT_RATIO 1.653

1. 宏实现函数,必须为宏中所有实参加上(),即使加上也会有被多次调用

template<typename T>
inline void print(T data)
{
	std::cout << data << std::endl;
}

#define CALL_WITH_MAX(a,b) print((a)>(b)?(a):(b))
void Test00()
{
	int a(5), b(0);
	CALL_WITH_MAX(++a, b); //a>b,两个(a)会执行两次++a;
	CALL_WITH_MAX(++a, b + 10); //b>a, 一个(a)执行一次++a;
}
  • 常量实现

1. 语言常量,编译器肯定会看到
2. 不会存在多份,减少代码量

const double AspectRatio = 1.653;

1. 指针和所指内容均为常量

const char* const authorName = "Scott Meyers";

1. 类作用域的常量至多一份,必须成为static
2. 宏不重视作用域

class GamePlayer00
{
private:
    static const int NumTurns = 5;
    int scores[NumTurns];
};

class GamePlayer01
{
private:
    enum
    {
        NumTurns = 5
    };
    int scores[NumTurns];
};

1. template inline函数不需要函数本体加(),也不需要担心参数被核算多次
2. template inline函数遵守作用域和访问规则

template<typename T>
inline void callWithMax(const T& a, const T& b)
{
	print(a > b ? a : b);
}

void Test01()
{
	int a(5), b(0);
	callWithMax(++a, b); //a>b,执行一次++a;
	callWithMax(++a, b + 10); //b>a, 执行一次++a;
}

int main()
{
	Test00();
	Test01();
	return EXIT_SUCCESS;
}

标签:02,const,++,void,enum,int,template,inline
From: https://www.cnblogs.com/BoYuCG/p/18401389

相关文章

  • Base2024
    简单记录了一部分题目(记录的基本就是看了wp的)Aura酱的礼物ssrfdata伪协议格式data://text/plain,xxx能读取出内容data://text/plain;base64,xxxxxx,xxxxxx先base64解码再读取出内容@隔断当要求url开头时,使用@来分隔file=http://[email protected]源码<?phphighlig......
  • 2024.9.6 近期练习
    P5044[IOI2018]meetings会议对于\(h_i\le20\)的数据,我们每个点维护单调栈,其代价为\(x\)的时候,取的位置是一个区间。很显然已经有一个莫队算法,支持区间加,区间查询即可。然而不优。其实单调栈与笛卡尔树是相似的,考虑建出笛卡尔树。我们假设就对\([l,r]\)dp,那么取出最......
  • 【C题已出】2024全国大学生数学建模C题完整论文+每小问解题代码+可视化结果图+最终结
                           2024国赛C题2024数学建模国赛C题word版成品论文【附带完整解题代码+可视化图表】https://www.jdmm.cc/file/2711227/一 、 摘要本文针对一个复杂的农业种植规划问题,建立了一系列优化模型并提出了相......
  • 【计算机毕设选题】2025届计算机专业毕设全新推荐选题指南
    文章目录前言一、2025计算机毕设推荐选题(1)javaWeb以及管理系统类(2)小程序以及安卓系统类(3)Python系统类二、项目结构示例(1)项目代码(2)运行截图三、项目部分代码设计四、数据库代码设计参考五、参考论文示例六、源码获取前言2025届的毕业季已经来到,相信各个高校的毕设......
  • 生成树协议(STP:802.1D、RSTP:802.1w、MSTP:802.1s)
    在二层网络中,如果没有生成树协议,会带来哪些问题:1、广播风暴2、MAC地址表飘移3、重复数据帧接收回顾生成树有哪些术语:1、根桥为了破除环路,生成树网络首先要选举出一个首脑,头脑,首领。叫做根桥,也叫作根交换机2、桥IDbridge-id:由桥优先级(默认取值为32768,必须为4096......
  • 2024.08.17京东
    1.桩子与雪村子里有一些桩子,从左到右高度依次为1,1+2,1+2+3…,每两颗桩子之间的间隔为1.现在下了一场大雪,但是不知道雪下了多厚,现在给你两个数字,这是雪后某相邻两个桩子在雪面的高度,请你通过这两个数字计算雪的厚度。简单计算intmain(intargc,char*argv[]){inta,b......
  • 【CSP】 202209-2 何以包邮?
    试题编号:202209-2试题名称:何以包邮?时间限制:1.0s内存限制:512.0MB70分DFS解法:#include<bits/stdc++.h>//包含所有标准库#defineN1000//定义常量N为1000#definelllonglong//定义ll为longlong类型的别名usingnamespacestd;llans=0x3f3f......
  • HNU-2023电路与电子学-实验1
    写在前面:这是电路与电子学课程的第一次实验,按照指导书的需求在Multisim软件搭建一个电路传感器模型,难度较小,细心完成就没有问题。小tips:22级实验是采用上传到测试平台来进行功能检测,如果不通过则会打回修改后再重新提交,(我们那时候的评测系统特别特别慢,一次只能测一个同学,......
  • 2024年电气工程自动化与信息处理国际会议 2024 International Conference on Electric
    文章目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus2024年09月20-22日|中国武汉三轮截稿时间:2024年9月10日三、大会介绍2024......
  • 2024年人文艺术、教育与社会发展国际学术会议(HAESD 2024) 2024 International Conferen
    文章目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus大会时间:2024年9月27日-29日大会地点:中国西安三、大会介绍为迎接知识经济......