C++- #define 和 const 有什么区别?

2023-05-16

回答如下:

  • 定义不同:#define 是C++预处理器的指令,用于定义宏,const是C++关键字,用于定义常量。
  • 作用对象不同:#define 定义的宏,可以是函数,对象,类型,而 const 只能定义常量。
  • 编译器处理方式不同:#define 宏会在预处理阶段展开,不能对宏定义进行调试,而 const 常量,可以在编译期进行分析和处理。
  • 类型和安全检查不同:#define 宏,没有任何类型检查,仅仅是代码展开,而 const 常量,有具体类型,编译器会进行类型检查,它比 #define 更安全。
  • 存储方式不同:#define 宏,在预处理阶段直接进行代码展开,存储在程序的代码段中,而 const 常量,会分配内存,且只有一份拷贝,存储在程序的数据段中。
  • 作用域规则不同:#define 宏,不存在作用域规则,直到遇到 #undef 时,才会停止生效,而 const 常量,存在作用域规则。

当变量需要根据其他宏计算得出时,必须使用#define;而当需要类型检查或者希望代码可读性更好时,应该使用const。总之,虽然# define和const都可以用来创建常量,但它们的实现方式和用法有很大的不同。

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

C++- #define 和 const 有什么区别? 的相关文章

  • 对‘cv::Mat::Mat()’未定义的引用,对‘cv::Mat::clone() const’未定义的引用

    报错如下 xff1a 解决办法 xff1a 在自己的可执行文件链接库的时候在后面加入opencv库即可 xff0c 即加入 OpenCV LIBS xff0c 如下图 xff1a add library sensor setup nodel
  • [原创][错误分析][Error] ‘stdios_baseios_base(const stdios_base&)‘ is private

    报错情况 在devc 43 43 中编写与C 43 43 类运算符重载时出现的了错误提示 编译器定位到的错误位置为ios base h下的 span class token keyword private span span class t
  • &与&&有什么区别?

    一 简要说明 按位与 xff1a a amp b 是把 a 和 b 都转换成二进制数然后再进行与的运算 xff1b 逻辑与 xff1a a amp amp b 就是当且仅当两个操作数均为 true 时 xff0c 其结果才为 true xf
  • php中define()函数和defined…

    原文地址 xff1a php中define 函数和defined 函数的使用 及来防止恶意调用 作者 xff1a 疯子的博客 php中define 函数和defined 函数的使用 define 用来定义常量 xff0c 常量也是全局范围的
  • C++ STL中判断list为空,size()==0和empty()有什么区别

    关于两个的区别 xff0c 首先size 61 61 0为bool表达式 xff0c empty 为函数调用 xff0c 这一点很明显 查看源代码 xff0c bool empty const return M node gt M next
  • apt update和apt upgrade命令 - 有什么区别?

    在之前的文章中 xff0c 我们查看了APT 命令以及您可以使用包管理器来管理包的各种方法 这是一个总体概述 xff0c 但在本指南中 xff0c 我们暂停并重点关注 2 个命令用法 这些是apt update和apt upgrade命令
  • dwm-1000 测距总是出现 #define SYS_STATUS_RXPTO 0x00200000UL /* Preamble detection timeout */

    ex 05b ds twr resp 程序 总是出现 致使官方的代码 无法实现通讯 define SYS STATUS RXPTO 0x00200000UL Preamble detection timeout 需要着重修改参数
  • git add .和git add *有什么区别

    git add 和 git add 区别 git add 会把本地所有untrack的文件都加入暂存区 xff0c 并且会根据 gitignore做过滤 xff0c 但是git add 会忽略 gitignore把任何文件都加入
  • C#中的readonly与const区别

    xfeff xfeff const 的概念就是一个包含不能修改的值的变量 常数表达式是在编译时可被完全计算的表达式 因此不能从一个变量中提取的值来初始化常量 如果 const int a 61 b 43 1 b是一个变量 xff0c 显然不
  • C语言中的关键字应用技巧(volatile、const、struct/union、_ _预定义_ _、#/##、void/void*、weak)

    嵌入式C开发关键字的应用技巧 1 volatile volatile修饰表示变量是易变的 xff0c 编译器中的优化器在用到这个变量时必须每次都小心地从内存中重新读取这个变量的值 xff0c 而不是使用保存在寄存器里的备份 xff0c 有效
  • [C/C++] const 详解(修饰变量、输入参数、返回值、成员函数)

    看到const关键字 xff0c 程序员首先想到的可能是const 常量 const 更大的魅力是它可以修饰函数的参数 返回值 xff0c 甚至函数的定义体 const 是constant 的缩写 xff0c 恒定不变 的意思 被const
  • const 与重载

    const到底是不是一个重载的参考对象 xff0c 请看下面的例子 class A public void f int i std cout lt lt 34 1 34 函数1 void f int i const std cout lt
  • ubuntu(15):对‘casadi::MX::MX(casadi::MX const&)’未定义的引用

    catkin build 编译报错 xff0c 找不到CASADI的头文件目录CASADI INCLUDE DIRS或者库文件也达不到CASADI LIBRARIES xff1b 对 casadi MX horzsplit casadi M
  • 对extern,static,const的再认识

    const const修饰的值为常量 是不可改变的 在c 语言中是不可改变的 而在C语言中 我们可以通过指针去修改那一片地址的值 const修饰的指针 表面指针指向或者指针的值是不可被修改的 我们可以通过通配符 的位置来判断 在左说明修饰的
  • #define宏定义详解

    define宏定义 1 常规用法 无参宏 define PI 3 1415926 define EN 1e5 定义指数1 10e5 cout lt
  • ES6中const详解

    我们使用const声明常量时 总认为值一旦声明就不可改变 然后我发现在定义对象时 对象的值是可以改变的 对于数值 var message Hello let age 25 以下两行都会报错 const message Goodbye con
  • 指针与const限定符

    const限定符和指针结合起来常见的情况有以下几种 const int a int const a 这两种写法是一样的 a是一个指向const int的指针 a所指向的内存单元不可改写 所以 a 是不允许的 但a可以改写 所以a 是允许的
  • VC++实用宏定义

    前言 在日常的编程工作中 常常定义一些实用的宏方便调用 该文章将收集一些常用的宏供大家参考 欢迎大家讨论和添加 指针释放 最常用的就是指针的安全释放 对应new的释放 ifndef ReleasePtr define ReleasePtr
  • 21,verilog之宏define介绍

    注 学习 交流就在博主的个人weixin公众号 FPGA动力联盟 留言或直接 博主weixin fpga start 私信 宏define提供用一个相对简单的文字来表示一大段真正有意义的文字作用 换句话说 就是综合软件见到定义的宏 就用这个
  • Effective C++——尽可能使用const

    const允许指定一个语义约束 也就是指定一个 不该被改动 的对象 而编译器会强制实施这项约束 只要保持某个值不变是事实 就应该说出来 以获得编译器的协助 保证不被违反 const与指针 注意const的写法 const char p p可

随机推荐

  • 解决ERROR: cannot launch node of type [move_base/move_base]

    最近拿了别人的程序跑 xff0c 直接将工作空间git了过来 xff0c 结果发现提示错误 xff1a ERROR cannot launch node of type move base move base Cannot locate n
  • 基于单片机控制的开关电源设计

    文末下载完整资料 1 概述 1 1 课题来源及意义 电源技术是一种应用功率半导体器件 xff0c 综合电力变换技术 现代电子技术 自动控制技术的多学科的边缘交叉技术 随着科学技术的发展 xff0c 电源技术又与现代控制理论 材料科学 电机工
  • Hikvison对接iSecure Center时获取Appkey和Secert、不显示API网关、预览时提示网络请求失败

    场景 SpringBoot 43 Vue 43 iSecure Center xff08 海康综合安防管理平台 xff09 实现视频预览 xff1a SpringBoot 43 Vue 43 iSecure Center xff08 海康综
  • request和response

    文章目录 前言一 request功能1 获取请求行数据 xff08 1 xff09 方法 xff08 2 xff09 获取请求头数据 xff08 3 xff09 获取请求体数据 2 其他功能 xff08 1 xff09 获取请求参数通用方式
  • C++ Primer Plus 学习笔记(一)

    目录 第二章 开始学习C 43 43 1 主函数 2 预处理器 3 endl 第三章 处理数据 1 简单变量 2 整型 3 C 43 43 初始化 xff1a 4 字符 5 bool 6 const限定符 7 浮点数 8 算数运算符 9 类
  • 【上位机与下位机通信】使用WIFI模块ESP8266连接单片机与上位机通信

    文章目录 前言一 ESP8266模块与STM32连接二 单片机代码三 总结 前言 承接上文WIFI上位机部分 xff1a 上位机 通过WIFI上位机与网络调试助手通信绘制曲线 xff0c 现阶段实现了STM32单片机与ESP8266WIFI
  • Linux C++服务器项目——项目实战1(理论知识)

    牛客 C 43 43 高并发服务器开发 参考笔记 1 阻塞 非阻塞 同步 异步 网络lO 2 Unix Linux上的五种lO模型a 阻塞blockingb 非阻塞non blocking NIO c IO复用 IO multiplexin
  • 网络编程传输层——UDP通信

    何为传输层 xff1f 在物理层 数据链路层 网络层解决了主机和主机之间能够发送接收数据 xff0c 但是在计算机网络中 xff0c 主机的通信主体还是进程 xff0c 而传输层则解决应用进程的通信 xff0c 所谓传输层协议也是端对端协议
  • WiFi的原理以及正点原子WiFi模块的使用

    本文主要用于记录WiFi的部分协议 原理 xff0c 以及如何使用正点原子的WiFi模块 文章名 xff1a WiFi的原理以及正点原子WiFi模块的使用 作者 xff1a 遮瑕 注 xff1a 本文大量引用 WIFI基本知识整理 以及百度
  • STM32 - 用户自定义通讯协议

    一 自定义协议 帧头1 xff1a 0x5A 帧头1 xff1a 0xA5 命令类型 xff1a 0x01 ADC 读取电压 0x02 外部flash写入 0x03 外部flash 读取 0x04 内部flash 写入 0x05 内部fla
  • 串口通信介绍

    文章目录 1 串口通信简介 xff08 DB9接口讲解 xff09 2 串口通信基本原理 xff08 1 xff09 串口通信连线 xff08 2 xff09 串口通信时序 1 波特率 2 起始位 3 数据位 4 奇偶校验位 5 停止位 3
  • curl 命令详解(超详细)

    GET 请求 GET 方法是在 curl 中发出请求的默认方法 xff0c 因此不必指定任何参数 eg curl https blog ucwords com o 保存响应到文件中 curl o response tex https blo
  • Matlab 命令行显示循环显示进度条

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 目录 前言一 代码二 简单说明三 测试总结 前言 闲来无事 xff0c 在用Matlab跑循环比较长的时候 xff0c 时间长 xff0c
  • Hikvison对接NVR实现WEB无插件开发包实现前端视频预览(html、vue、nginx代理)

    场景 Vue中预览HIKVSION海康威视的NVR 网络硬盘录像机 中多个通道 摄像机 的视频 xff1a Vue中预览HIKVSION海康威视的NVR 网络硬盘录像机 中多个通道 摄像机 的视频 霸道流氓气质的博客 CSDN博客 海康nv
  • C++ 为什么编写模板类时要把方法的实现写在头文件中,而不能像写普通类一样写在源文件中?

    1 回答标题的问题 这里说下我自己的理解 xff0c 如有不正确请各位大佬斧正 想要解决这个问题需要先了解C 43 43 代码的编译过程 C 43 43 将代码编译生成可执行文件的过程可以分为三步 xff1a 预编译 编译 链接 预编译时
  • 加速度计、陀螺仪工作原理

    加速度计 陀螺仪的工作原理 参考链接 xff1a https c miaowlabs com B07 html 陀螺仪 加速度计都是惯性测量元件的一种 而 MPU 6050 传感器的内部同时集成了陀螺仪和加速度传感器两种惯性测量元件 1 加
  • VsCode中运行C/C++

    VsCode中运行C C 43 43 1 插件 runCode2 配置环境 mingw64 1 插件 runCode 在 VsCode 中的扩展商店中 xff0c 下载插件 Code Runner 安装完成之后 xff0c 进行一些配置更改
  • 常见通信协议之UART、RS485

    UART 通用异步收发器一种通用的串行 异步通信总线 xff0c 该总线有两条数据线 xff0c 可以实现全双工的发送和接受并行通信和串行通信 总线传递数据的本质 高低电信号并行通信 一次性传输多个位 布线难度高 存在数据干扰串行通信 逐次
  • java的琐碎学习之串口通信与数据库与GUI

    RFID作业 xff0c 要求实现软硬结合 xff0c 全部使用自己的页面完成 xff1b 找了几个教程发现安卓我做不到 xff0c 就用了Java实现 xff1b 图书管理系统 可以通过写卡来绑定15693卡和书籍 xff0c 实现增删改
  • C++- #define 和 const 有什么区别?

    回答如下 xff1a 定义不同 xff1a define 是C 43 43 预处理器的指令 xff0c 用于定义宏 xff0c const是C 43 43 关键字 xff0c 用于定义常量 作用对象不同 xff1a define 定义的宏