C++进阶—>const、define和enum的区别和用途

2023-05-16

1.区别

这三种都可以定义常量。

define是宏定义,编译器不对其进行错误检查,在预编译阶段处理,没有作用域限制属于全局常量,在程序中编译器会对定义的常量名以数值进行替换,且每次替换都分配内存,此方法对于大量常量的情况下会占用较多内存从而导致程序效率;

const是常量定义,在编译阶段处理,作用域限制,定义常量分配内存后后续再使用常量情况下不会再为其分配内存,只分配一份内存地址,故常用于此方法定义常量;

enum是枚举常量定义,在编译阶段处理,有作用域限制,枚举类型中可以定义多个常量(往往是同一归属的常量,比如定义星期可以有7种,enum weekday{one=1,two=2,three=3};(weekday是定义的枚举类型名)),需注意的是在C++中enum枚举类型中只能赋值int型值(即使可以赋值字符,但输出仍是整型)。

define、cosnt和enum的区别:

(1)define 宏定义常量,在开始预处理时就要被替换,所以定义的记号名不会进入记号表,当编译调试时,因为到时直接是一个数值,可能让人产生迷惑。 可以用const 和 enum 来代替宏。常量肯定会进入记号表,可以更容易跟踪,使用常量可能比使用#define导致较小量的码,因为编译器会盲目的将宏定义进行替换,而常量一般在内存中只有一份实体

(2)我们无法利用#define创建一个class专属常量,因为#define并不重视作用域。

(3)取一个const地址是合法的,但取一个enum的地址是不合法的,取一个#define的地址也不合法

2.用途

(1)define:一般用于全局型常量的定义,通常较少使用,在具有较少全局型常量(程序各处都可能用到该常量)时使用;

(2)const:一般用于类常量,常配合static来使用,定义类中静态常量,类的任何对象都能够共享此常量static const常量在定义时初始化。程序中往往多使用const来替代define。

(3)enum:一般用于某种类型具有多个常量的时候定义,比如某种功能实现有三种方法,可定义enum method{method0=0,method1=1,method2=2}来选择使用哪种方法实现其功能。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++进阶—>const、define和enum的区别和用途 的相关文章

  • iPhone卡死 强制重启iPhone 14

    粘贴无法取消 xff0c iPhone卡死 xff0c 无法操作 iPhone 强制重启 无法滑动来关机 按一下 音量键 43 键 xff08 不需要长按 xff09 按一下 音量键 键 xff08 不需要长按 xff09 长按 电源键 大
  • Mainnet endpoint Filecoin Lotus api

    infura ENDPOINTS https span class token punctuation span span class token operator span span class token operator span 2
  • sed 将匹配的整行替换

    sed 将匹配的整行替换 sed 39 span class token operator span pattern span class token operator span c replacement line 39 file pat
  • Spring的Java配置方式

    Spring的发展 Spring1 x 时代 在Spring1 x时代 xff0c 都是通过xml文件配置bean xff0c 随着项目的不断扩大 xff0c 需要将xml配置分放到不同的配置文件中 xff0c 需要频繁的在java类和xm
  • Keychron K3 Pro

    Keychron K3 Pro Keychron K3 Pro A31 连接蓝牙2 更改键盘背光模式和快速关闭开启键盘背光3 调整键盘背光亮度4 调整背光速度5 查看电池电量 Keychron K3 Pro A3 1 连接蓝牙 长按fn 4
  • miner14 export

    lotus chain export span class token operator span recent span class token operator span stateroots span class token oper
  • iTerm2 恢复窗口

    退出应用程序时关闭窗口
  • Homebrew 安装

    Homebrew Homebrew 安装添加 Homebrew 到 PATH在当前终端设置环境变量 运行参考 Homebrew 安装 span class token operator span bin span class token o
  • sed 使用#作为分隔符

    sed 将 bin sh替换为bash需要使用 进行转义 以匹配 字符使用 作为分隔符 将 bin sh替换为bash 需要使用 进行转义 以匹配 字符 sed 39 s span class token operator span spa
  • 华为 USG6625E 防火墙

    服务列表 需要设置目标端口
  • baseDeltaSeconds PROPAGATION_DELAY_SECS 设置传播延迟时间

    设置lotus传播延迟 默认区块传播延迟10秒设置环境变量参考 xff1a 默认区块传播延迟10秒 span class token string 34 baseDeltaSeconds 34 span span class token p
  • Ubuntu 18.04禁止内核更新

    apt span class token operator span mark showhold linux span class token operator span headers span class token operator
  • AMD64的4个架构级别 v1 v2 v3 v4

    查看cpu支持指令 lscpu span class token operator span grep Flags 例如 GOAMD64 61 v3 使用 AVX2 查看cpu是否支持指令 lscpu span class token op
  • Ubuntu 18.04 安装 ffmpeg

    Ubuntu 18 04 安装 ffmpeg wget http span class token punctuation span span class token operator span span class token opera
  • 图形界面无法启动的解决办法

    错误提示信息 xff1a log file 34 var log xorg 0 log 34 Using config file 34 etc X11 Xorg conf 34 gt error bad lenght in compatma
  • SUSE Linux Ubuntu 下安装mysql遇到的问题一。

    用的是阿里云的新服务器 xff0c 用的是Ubuntu不是Contos的在安装mysql的时候遇到了一些问题 在此记录一下 1 创建目录用来下载安装包 命令 xff1a mkdir usr local software 文件目录根据没有固定
  • 是时候拥抱ViewBinding了~

    是时候拥抱ViewBinding了 xff01 xff01 一 前言二 初识ViewBinding三 拥抱ViewBinding3 1 环境要求3 2 开启ViewBinding功能3 3 Activity中ViewBinding的使用3
  • linux下以rpm包安装mysql

    目录 下载 上传解压 安装 编辑my cnf配置文件 启动数据库 修改初始密码 授权远程登录 常见问题 下载 访问以下地址下载对应操作系统下所需的版本 https downloads mysql com archives community
  • sizeof用法详解

    一 sizeof是什么 sizeof是C语言的一种单目操作符 xff0c 如C语言的其他操作符 43 43 等 它并不是函数 sizeof操作符以字节形式给出了其操作数的存储大小 操作数可以是一个表达式或括在括号内的类型名 操作数的存储大小
  • 【ftp2ftp】文件以字节流的形式冲FTP1传输到FTP2,中间出现文件传输失败的问题(只传输了一半,文件损坏)

    文件传输问题 需求实现逻辑问题代码简述正确的代码代码合集 需求 代码直接实现两个ftp之间的文件相互传输 实现逻辑 ftp1的file转变成inputStream inputStream转变为字符集byte 字符集写入ftp2的output

随机推荐

  • 【Java】反编译Mac版Charles,修改一些功能

    目录 反编译jar使用javassist修改目标class替换CharlesContext class 参考 最近学习HTTP代理相关资料时 xff0c 偶然间发现Mac上的charles是用java实现的 xff0c 且很好破解 xff0
  • 为什么说TCP是面向流的协议?而UDP是面向数据报的协议?

    问题 经常能听人说 xff1a TCP是面向流的协议 xff0c 而UDP是面向数据报的协议 从字面理解上来说 xff0c 似懂非懂 每次都不是能彻底明白什么是流 xff0c 什么是数据报 xff1f 在大家眼里 xff0c 网络报文都是I
  • 【面试题】N级台阶(比如100级),每次可走1步或者2步,求总共有多少种走法?

    走台阶算法 xff08 本质上是斐波那契数列 xff09 在面试中常会遇到 xff0c 描述就如题目那样 xff1a 总共100级台阶 xff08 任意级都行 xff09 xff0c 小明每次可选择走1步 2步或者3步 xff0c 问走完这
  • Java访问权限修饰符的区别

    Java有四种访问权限 xff0c 其中三种有访问权限修饰符 xff0c 分别为private xff0c public和protected xff0c 还有一种不带任何修饰符 xff1a private Java语言中对访问权限限制的最窄
  • “二分查找”算法的时间复杂度

    算法的时间复杂度无非就是for while等包含起来的基本运算单元的循环次数 1 二分查找 二分查找 xff08 binary search xff09 xff0c 也称作折半查找 xff08 half interval search xf
  • ORA-12547与在 root 下执行 Oracle 程序时找不到 libclntsh.so.11.1解决方案

    在 root 下执行 Oracle 程序时找不到 libclntsh so 11 1时 如图所示libclntsh so 11 1 61 gt not found 解决方法 xff1a locate libclntsh so 11 1 找到
  • 【D3.js】力导向布局 + 圆形图片展示的人物关系

    前言 使用d3的力学图 xff08 力导向图 xff09 与生活中常见的人物关系图结合 xff0c 已经有了很好的例子 xff1a D3 js 进阶系列 2 0 力学图 43 人物关系图 xff0c 博主实现了下面这种样式 xff0c 已经
  • 【Android】adb 查看所有程序包名

    adb shell pm span class hljs keyword list span packages 列出所有的包名 adb shell pm list packages span class hljs label package
  • 【算法】大数乘法问题及其高效算法

    题目 编写两个任意位数的大数相乘的程序 xff0c 给出计算结果 比如 xff1a 题目描述 xff1a 输出两个不超过100位的大整数的乘积 输入 xff1a 输入两个大整数 xff0c 如1234567 和 123 输出 xff1a 输
  • 【算法】如何判断链表有环

    如何判断单链表是否存在环 有一个单向链表 xff0c 链表当中有可能出现 环 xff0c 就像题图这样 如何用程序判断出这个链表是有环链表 xff1f 不允许修改链表结构 时间复杂度O n xff0c 空间复杂度O 1 方法一 穷举遍历 方
  • 【Android】移动端接入Cronet实践

    移动端接入Cronet实践 QUIC协议获取Chromium源码编译CronetAndroid iOS buildsDesktop builds targets the current OS Running the ninja files生
  • Linux系统下安装Java环境

    目录 测试环境 下载JDK 终端模拟软件 安装前准备 tar包的安装方法 tar包的卸载 rpm包的安装方法 rpm包的卸载 测试环境 LInux系统版本 xff1a CentOS 7 64位 终端模拟软件 xff1a Xshell 6 J
  • 【Hexo】Hexo个人博客绑定域名

    Hexo个人博客绑定域名 当我们在用hexo搭建了个人博客之后 xff0c 用username github io访问难免有些奇怪 xff0c 下面就花3分钟时间对如何绑定个人域名进行描述 我这边是在阿里云买的一个域名 xff0c ycbl
  • 生产者消费者的代码实现

    当消费者获得的数据为大写字母时 xff0c 则把大写字母转换成小写字母 xff0c 并显示 xff1b 当消费者获得的数据为小写字母时 xff0c 则把小写字母转换成大写字母 xff0c 并显示 xff1b 当消费者获得的数据为字符0 1
  • 基于RobHess的SIFT图像拼接知识点随笔

    1 SIFT算法具有尺度不变性在于构建的高斯尺度空间 xff1b 2 SIFT算法具有旋转不变性在于特征方向向量 xff1b 3 K d数以图像特征点的128维特征描述子均值为依据进行划分 构建 xff1b 4 特征点匹配是一个图像的所有特
  • 最小二乘法及OpenCv函数

    1 最小二乘法 我们以最简单的一元线性模型来解释最小二乘法 什么是一元线性模型呢 xff1f 监督学习中 xff0c 如果预测的变量是离散的 xff0c 我们称其为分类 xff08 如决策树 xff0c 支持向量机等 xff09 xff0c
  • Linux服务器网络不通情况分析以及常见检查方法

    在实际运维过程中 xff0c 经常会遇到网路不通的问题 xff0c 一般此类网络不通的问题都是业务端到端的排查 本文从后端linux服务器端自查是否服务器问题 通过多年的运维经验总结 xff0c 服务器端问题导致网络不通 xff0c 大致分
  • RANSAC算法实现去除误匹配并计算拼接矩阵-随笔

    1 RANSAC算法实现去除误匹配并计算拼接矩阵流程 1 从样本集中随机抽选一个RANSAC样本 xff0c 即4个匹配点对 xff08 至少4个匹配点对 xff0c 才能计算出3 3变换矩阵 xff09 xff1b 2 计算当错误概率为0
  • linux c++ 服务器端开发面试必看书籍

    由于很多朋友希望加入到Linux c 43 43 服务器端开发的队伍中 xff0c 本人就结合自己的面试经历并整理了自己阅读的相关书籍 xff0c 同大家分享 xff0c 一起进步 人个认为以下是进入这个方向的必看书籍 xff0c 各系列难
  • C++进阶—>const、define和enum的区别和用途

    1 区别 这三种都可以定义常量 define是宏定义 xff0c 编译器不对其进行错误检查 xff0c 在预编译阶段处理 xff0c 没有作用域限制属于全局常量 xff0c 在程序中编译器会对定义的常量名以数值进行替换 xff0c 且每次替