constexpr 是编译期常量表达式,const 是运行时不可修改对象;前者必须在编译期求值并用于模板参数、数组大小等场景,后者仅保证初始化后不被修改,值可来自运行时。

constexpr 和 const 都表示“不可变”,但本质完全不同:前者是**编译期可求值的常量表达式**,后者只是**运行时不可修改的对象**。简单说,const 不一定在编译期知道值,constexpr 一定在编译期就知道值且能参与编译期计算。
const:只保证“不修改”,不保证“编译期可知”
const 变量只要求初始化后不能被修改,但它的值可以来自运行时——比如函数返回、用户输入、随机数等。
- int x = 42; const int a = x; // ✅ 合法,但 a 不是编译期常量
- const int b = rand(); // ✅ C++11 起允许(只要类型支持),但 b 仍不是编译期常量
- int arr[a]; // ❌ 错误!a 不是常量表达式,不能用作数组长度
constexpr:强制“编译期可算出”,用途更严格也更强大
constexpr 变量必须用常量表达式初始化;constexpr 函数/构造函数,编译器会尝试在编译期求值(若参数满足条件)。
Gaga
曹越团队开发的AI视频生成工具
1151
查看详情
- constexp
r int c = 42; // ✅ 编译期常量,可用作数组大小 - int arr[c]; // ✅ 合法(C++11 起支持)
- constexpr int square(int n) { return n * n; } // C++11 允许,但仅限简单表达式
- constexpr int d = square(5); // ✅ 编译期算出 25
- int y = 3; constexpr int e = square(y); // ❌ 错误!y 不是常量表达式
关键区别总结(C++11 视角)
- const 变量可以是非字面类型(如自定义类),但不能用于需要常量表达式的地方(模板非类型参数、case 标签、数组大小等)
- constexpr 变量必须是字面类型(literal type),且初始化必须是常量表达式;它能用在所有需要编译期常量的上下文中
- const 函数(成员函数)表示不修改对象状态;constexpr 函数表示“可能在编译期求值”——二者语义完全无关
- 一个变量可以同时是 const 和 constexpr(推荐写法):constexpr const int x = 42; ——但通常直接写 constexpr 更清晰
实用建议:什么时候用哪个?
- 要定义一个**编译期已知的整数、指针或简单结构体**(比如数组大小、模板参数、case 值)→ 用 constexpr
- 只想防止运行时意外修改某个局部/成员变量 → 用 const(更轻量,兼容性更好)
- 函数逻辑简单、参数确定时希望编译期优化 → 尝试加 constexpr(C++11 限制多,C++14 后更宽松)
- 不确定是否能编译期求值?先写 constexpr,编译器会报错提醒你哪里不满足常量表达式要求
基本上就这些。记住核心:const 是运行时契约,constexpr 是编译期承诺。
立即学习“C++免费学习笔记(深入)”;
以上就是C++ constexpr和const有什么区别?C++编译期常量使用指南【C++11】的详细内容,更多请关注其它相关文章!
# 自定义
# 养生茶seo
# 黑龙江网站优化团队推荐
# 灶具营销推广方案策划
# 网站运营推广该如何做
# 怎样做网站建设工作
# 东光网站建设设计
# asp网站建设助理招聘
# 网站建设万和
# 贵阳专业网站seo优化网站
# 合肥推广营销方法
# c++
# 中文网
# 相关文章
# 修饰符
# 什么时候
# 随机数
# 有什么
# 什么用
# 有什么区别
# 求值
# 区别
相关栏目:
【
企业资讯168 】
【
行业动态20933 】
【
网络营销52431 】
【
网络学院91036 】
【
运营推广7012 】
【
科技资讯60970 】
相关推荐:
C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图
UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS
树莓派传感器触发:通过Twilio API发送WhatsApp消息教程
从J*aScript对象中精确提取指定属性的教程
谷歌google账号怎么注册账号 谷歌账号注册官方流程
Python Socket多播通信中指定源IP地址的实践指南
解决J*aScript中重复选择项的确认对话框显示问题
C#中解析不规范的HTML为XML 常见的坑与解决办法
深入理解Go语言中的指针类型:以*string为例
C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用
腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址
C++ string清空内容_C++ clear与empty用法
处理Kafka消费者会话超时:深入理解消息处理语义与幂等性
UC浏览器官网入口2025最新 UC浏览器网页版正式地址
win11 Snap Layouts怎么用 Win11窗口布局与分屏多任务高效指南【必学】
J*aScript教程:根据元素文本内容动态设置背景色
照顾宝贝2小游戏点击立即在线玩
如何在J*a中实现统一对象行为接口_项目大型化时的接口规范化
mc.js官网登录入口 mc.js官方登录入口最新版
c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧
免费抖音短视频入口_抖音网页版短视频免费通道
C++ string find函数返回值npos详解_C++字符串查找失败的判断条件
菜鸟取件码是什么怎么查 最全查询渠道汇总
j*a toString()的覆盖
三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升
ArrayList与LinkedList核心操作的Big-O复杂度分析
高德地图家和公司地址在哪设置 高德地图通勤路线设置方法【超详细】
在Go Martini框架中高效服务动态生成图像的实践指南
必由学登录入口 必由学官方网站在线访问链接
利用Bokeh CustomJS动态控制DataTable列可见性
AO3网页版合集入口 Archive of Our Own同人作品浏览指南
Log4j Console Appender性能瓶颈与高并发优化策略
微信语音通话掉线如何解决 微信语音通话稳定优化方法
Shopify Liquid:高效管理与访问产品变体数组属性
Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程
漫蛙网页登录入口 漫蛙漫画官方授权网址
必由学官方平台入口 必由学在线课堂登录地址
C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责
html网页设计源代码怎么运行_运行html网页设计源代码步骤【指南】
Tailwind CSS line-clamp 布局问题解析与修复指南
J*a实现学校排课程序_面向对象结构化项目示例
使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战
地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站
小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】
理解Python模块与全局变量的作用域管理
知音漫客正版漫画平台_知音漫客官网账号登录
Mudbox图层蒙版怎么用_Mudbox图层蒙版数字雕刻应用技巧
excel如何生成目录 excel一键生成工作表目录超链接
Python实时数据流中的动态最值查找策略
我的世界官方游戏入口 我的世界官网平台直达链接


r int c = 42; // ✅ 编译期常量,可用作数组大小