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

目录

1.const定义常量

2.cosnt修饰指针

3.class的专属常量

4.the enum hack

5.用inline代替#define宏函数


1.const定义常量

#define B 1.63

const int B = 1.63

原因:

1.#define是在预处理阶段,直接将代码中的B替换为1.63会产生多份,而常量不会产生这样的情况。

2.当你用#define出现错误时后,编译器可能会提到1.63,不会提到B,如果1.63来自头文件,还需要去头文件去追踪。

2.cosnt修饰指针

cosnt char*const authorname = "wys";

const 在 * 之前修饰 指针指向的内容,在*之后修饰指针变量本身。

3.class的专属常量

因为val在静态区,不在对象A内不能用初始化列表初始化,所以必须在类内声明,类外定义初始化。

新的编译器会支持在声明时初始化。

class A 
{public:static const int size = 3;int arr[size];
};//const int A::size = 3;

#define不能这么做,因为#define是无脑替换,不能提供任何封装

4.the enum hack

如果你的编译器不支持在类内初始化,可以用enum类型数值,充当int使用。

class A 
{
 public:
     enum{size = 3}; //size就成了3的记号名称。
     int arr[size];
};

enum hack比较像#define,而不是const,就像你可以用对cosnt取地址,引用,但是不能对#define取地址,引用,所以当你不想被取到常量的地址或者引用,可以用enum hack。

5.用inline代替#define宏函数

1.宏函数需要把每个实参都加上(),即使这样宏函数仍然有不确定的行为。

2.#define是无脑替换没有作用域,也不能封装。

内联函数就不用担心这样的问题,内联函数是真正的函数,会有作用域,可以封装,还有参数的检查。

template<class T>
inline int fun(const T &a, const T&b )
{
    return a + b;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/710134.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp如何实现关闭前面指定数目页面

需求 &#xff1a; 路由从 页面A -> 页面B-> 页面C-> 页面D 我希望在 页面C跳到页面CD 后 在页面D 中 点击返回&#xff08;物理键或是代码返回&#xff09;&#xff0c;直接返回到A,而不是页面C 所以我需要把BC页面给销毁掉 以下是我的实现思路&#xff0c;在h…

Linux系统编程之线程互斥锁的使用方法

文章目录 一、Linux上线程开发互斥锁概要二、创建及销毁互斥锁2.1 示例&#xff1a;主线程等待两个线程退出&#xff0c;1线程和2线程打印信息 三、互斥量的初始化问题 一、Linux上线程开发互斥锁概要 互斥量&#xff08;mutex&#xff09;从本质上来说是一把锁&#xff0c;在…

Stable Diffusion 模型分享:yayoi_mix(日本美女、真实、照片)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五 下载地址 模型介绍 yayoi_mix 是一个现实模型&#xff0c;是一个针对日本女性训练及合并的模型。 条目内容类型大模型基础模型SD…

前后端项目宝塔linux部署(springboot,vue,python)

宝塔linux安装就省略了&#xff0c;网上一堆 1.部署后端 1.首先把自己项目里面打包好的的jar包上传到服务器随便一个地方&#xff0c;我这里就上传到www/wwwroot下面了&#xff0c;宝塔的文件页面可以很便携上传 2.然后到下面这个页面 选那个java环境管理装个jdk&#xff…

全网首个GDB移植手册【Howto:Porting the GUN Debugger】翻译

Howto:Porting the GUN Debugger ✍【作者】&#xff1a;电子科大不知名程序员 &#x1f4e3;【说明】&#xff1a;本文是自己在搭建mcore架构GDB时的参考的手册&#xff0c;具有很强的学习指导性&#xff0c;因原文档&#xff08;链接&#xff1a;https://www.embecosm.com/a…

企业文件图纸加密有哪些?图纸文件加密防泄密软件如何选?

在现在的市场发展中&#xff0c;对于企业的图纸文件安全问题越来越重视&#xff0c;如设计图纸&#xff0c;重要文件等&#xff0c;一旦泄漏就会给企业造成巨大的经济损失。所以对企业管理者来讲&#xff0c;如何才能选择一款好用的适合本企业的图纸文件加密软件是非常重要的&a…

【常用的 SVN 命令及简要示例】

常用的 SVN 命令及简要示例&#xff0c;供您参考&#xff1a; 检出代码: svn checkout https://svn.example.com/project/trunk提交修改: svn commit -m "Commit message"更新代码: svn update创建分支: svn copy https://svn.example.com/project/trunk \https://sv…

网络编程难点之select、poll与epoll详解

前言 为什么需要I/O多路复用技术&#xff1f; 首先&#xff0c;I/O多路复用技术主要被应用在需要高性能的网络服务器程序中。 高性能网络服务器程序需要做的事情就是供多个客户端同时进行连接并处理客户端传送过来的数据请求&#xff1a; 对于这种情况&#xff0c;很多人自然…

【招生】江西师范大学—地质灾害研究团队—地理与环境学院/鄱阳湖流域实验室

【招生】江西师范大学—地质灾害研究团队—地理与环境学院/鄱阳湖流域实验室 研究方向&#xff1a;InSAR、极化SAR、GNSS、地球物理、GIS 招生专业&#xff1a;GIS、人文地理 学院地址&#xff1a;江西南昌江西师范大学

什么是数据同步利器DataX,如何使用?

什么是 Datax? DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;使用Java 语言编写&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、Ma…

python笔记_数据类型

定义&#xff1a;python的变量在使用前必须赋值&#xff0c;数据类型指的是变量指定的内存数据的类型 string字符串类型使用引号int整型整数float浮点型小数bool布尔值(逻辑)输出true/false A&#xff0c;整数类型 整型字节 1,python的整数有十六进制&#xff0c;十进制&#…

面试数据库篇(mysql)- 11主从同步

原理 MySQL主从复制的核心就是二进制日志 二进制日志&#xff08;BINLOG&#xff09;记录了所有的 DDL&#xff08;数据定义语言&#xff09;语句和 DML&#xff08;数据操纵语言&#xff09;语句&#xff0c;但不包括数据查询&#xff08;SELECT、SHOW&#xff09;语句。 复…

Java 小项目开发日记 03(文章分类接口的开发)

Java 小项目开发日记 03&#xff08;文章分类接口的开发&#xff09; 项目目录 配置文件&#xff08;pom.xml&#xff09; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocat…

【Elasticsearch查询】精确查询

文章目录 复合查询constant_score querybool querydis_max queryfunction_score queryboosting query单层嵌套双层嵌套 词项查询term query&#xff08;词项查询&#xff09;数字的精确查询文本的精确查询查询优化 terms query&#xff08;多词项查询&#xff09;terms_set que…

计算机网络:数据链路层知识点汇总

文章目录 一、数据链路层功能概述二、封装成帧和透明传输三、差错控制&#xff08;检错编码&#xff09;四、差错控制&#xff08;纠错编码&#xff09;五、流量控制与可靠传输机制六、停止-等待协议七、后退N帧协议&#xff08;GBN&#xff09;八、选择重传协议&#xff08;SR…

2024年华为OD机试真题-运输时间-Python-OD统一考试(C卷)

题目描述&#xff1a; M&#xff08;1<M <20&#xff09;辆车需要在一条不能超车的单行道到达终点&#xff0c;起点到终点的距离为N&#xff08;1<N<400&#xff09;。速度快的车追上前车后&#xff0c;只能以前车的速度继续行驶&#xff0c;求最后一车辆到达目的地…

用户增长6步法

什么是用户增长&#xff1f; 通过痛点、产品、渠道、内容、技术、数据等要素实现用户的获取、激活、留存、变现、推荐&#xff0c;用户增长包含了产品出现前的用户增长、产品生产周期内的用户增长、产品生命周期外的用户增长三个阶段。 用户增长6步法&#xff1a;方法、模型和…

【2024年】江苏省彭城监狱监狱食堂生活物资蔬菜类采购项目竞争磋商公告

【2024年】江苏省彭城监狱监狱食堂生活物资蔬菜类采购项目竞争磋商公告 &#xff08;招标编号&#xff1a;PC-JY-2024-004&#xff09; 项目所在地区&#xff1a;江苏省徐州市 一、招标条件 本监狱食堂生活物资蔬菜类采购已由项目审批/核准/备案机关批准&#xff0c;项目资金来…

YOLOv8-TensorRT on Jetson

YOLOv8-TensorRT Jetson 项目地址&#xff1a;https://github.com/triple-Mu/YOLOv8-TensorRT/blob/main/docs/Jetson.md 文档地址&#xff1a;https://github.com/triple-Mu/YOLOv8-TensorRT/blob/main/docs/Jetson.md 注意 engine 文件不跨平台&#xff0c;只能在对应的平台…

docker mysql主从复制

新建主服务器容器实例3301 mysql 主 3301 docker run -p 3301:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysql \ -v /mydata/mysql-master/conf:/etc/mysql \ -v /home/mysql/mysql-files:/var/lib/…