当前位置: 首页 > 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。

相关文章:

  • Flotherm许可使用监控
  • Flink中的反压与背压:原理、检测与应对
  • Origin绘制三Y轴柱状图、点线图、柱状点线图
  • 单片机——浮点数转换4位数码管显示
  • inotify-cpp 使用
  • [特殊字符] OpenCV opencv_world 模块作用及编译实践完整指南
  • Node.js特训专栏-实战进阶:7.Express模板引擎选型与使用
  • uniapp打包apk后实现APP消息通知详细教程
  • 【Spring】系统化的 Spring Boot 全栈学习教程,涵盖基础配置、核心功能、进阶实战及文档自动生成
  • 在Springboot项目部署时遇到,centos服务器上,curl请求目标地址不通 ,curl -x 可以请求通的解决办法
  • Spring Bean生命周期(基于spring-beans-6.2.6分析)
  • Bootstrap 5学习教程,从入门到精通,Bootstrap 5 提示框(Tooltips) 语法知识点及案例(21)
  • uniapp:微信小程序胶囊「复制链接」灰色处理
  • EEG分类 - Theta 频带 power
  • JimuReport:一款免费的数据可视化报表工具
  • GitLab 17.8 备份秘籍:快速获取纯 Git 仓库与核心配置
  • Word2Vec 原理是什么
  • Learning PostgresSQL读书笔记: 第1章 Introduction to PostgreSQL
  • 【AI 测试】测试用例设计:人工智能语言大模型性能测试用例设计
  • 【数码管向左出现与消失滚动“456789Ab”】2022-4-25
  • 能不能上传网站再备案/大连seo优化
  • 网站内容策划/各大搜索引擎提交入口
  • 昆山公司网站建设/西安网站seo优化公司
  • 非遗文化网站建设/seo指导
  • 医院营销型网站建设/网页设计模板html代码
  • 校园网站策划书/如何做企业网站