当前位置: 首页 > news >正文

【c++八股文】Day3:inline与define与constexpr

inline vs #define vs constexpr 总结

特性 / 关键词#defineinlineconstexpr
所属阶段预处理阶段编译阶段编译阶段
作用对象宏(可替代函数或常量)函数(有时用于类内定义)常量(或常量表达式函数)
类型检查❌ 无类型检查✅ 有类型检查✅ 有类型检查
安全性❌ 易出错(副作用、优先级)✅ 安全(与普通函数等价)✅ 安全(编译期常量)
替换方式文本替换语义替换(函数调用)语义替换(常量值)
调试支持❌ 行号不准确✅ 好调试✅ 好调试
是否推荐❌ 不推荐✅ 推荐用于小函数✅ 强烈推荐用于常量表达式
多次求值风险✅ 有(比如 x++ 会求多次)❌ 没有❌ 没有
主要用途旧式宏,定义常量/宏函数小函数内联优化、类内函数定义编译期常量、constexpr函数

✅ 举例对比

1. #define

#define PI 3.14159
#define SQUARE(x) ((x) * (x))

问题:

  • 没有作用域控制
  • 没有类型检查
  • 参数可能多次求值导致副作用

2. inline

inline int square(int x) { return x * x; }

优势:

  • 类型安全
  • 编译器可选择是否展开(非强制)
  • 支持函数重载、命名空间、类作用域等现代特性

3. constexpr

constexpr double pi = 3.14159;
constexpr int square(int x) { return x * x; }

优势:

  • 支持常量表达式计算
  • 类型安全,可用于数组大小、模板参数等场景
  • 编译期求值,生成效率高

🧠 总结口诀(便于记忆八股文)

#define 替文本,类型不检易出事;
inline 是函数,检查类型可内联;
constexpr 定常量,编译期算最安全。
现代 C++:弃宏用常量,用函数就 inline。
http://www.lqws.cn/news/496747.html

相关文章:

  • Android手机屏幕分为几种
  • Docker高级管理--Dockerfile镜像制作
  • 【科技公司的管理】
  • 【目标检测】图像处理基础:像素、分辨率与图像格式解析
  • Spring AI框架的实战应用指南
  • vscode 插件
  • 以玄幻小说方式打开深度学习词嵌入算法!! 使用Skip-gram来完成 Word2Vec 词嵌入(Embedding)
  • 显示任何结构的数组对象数据【向上自动滚动】
  • 七层网络模型与电脑通信比喻
  • Typora无限续
  • [创业之路-438]:行业 - 互联网+X技术发展趋势、关键技术简介、行业发展趋势
  • 【第二章:机器学习与神经网络概述】03.类算法理论与实践-(2)朴素贝叶斯分类器
  • 【7】图像变换(上)
  • FPGA基础 -- Verilog 驱动强度(drive strength)与电荷强度(charge strength)
  • 黄晓明考博落榜,本人回应
  • react gsap动画库使用详解之scroll滑动动画
  • 2025年CSS最新高频面试题及核心解析
  • 16.数据聚合
  • LINUX 623 FTP回顾
  • 设计模式精讲 Day 12:代理模式(Proxy Pattern)
  • 手撕 Decoder
  • 将RESP.app的备份数据转码成AnotherRedisDesktopManager的格式
  • react gsap动画库使用详解之text文本动画
  • 山洪灾害智能监测站系统解决方案
  • 通过apache共享文件
  • 渗透测试指南(CSMSF):Windows 与 Linux 系统中的日志与文件痕迹清理
  • XSD是什么,与XML关系
  • D2554探鸽协议,sensor属性,回调
  • 关于 pdd:anti_content参数分析与逆向
  • 前端面试记录