如何区分C++常量表达式、const、constexpr
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要介绍如何区分C++常量表达式、const、constexpr,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!常量表达式是指值不会改变且在编译过程中就能够得到计算结果的
千家信息网最后更新 2025年01月18日如何区分C++常量表达式、const、constexpr
这篇文章主要介绍如何区分C++常量表达式、const、constexpr,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
常量表达式是指值不会改变且在编译过程中就能够得到计算结果的表达式,能在编译时求值的表达式。
例1:
#includeusing namespace std;int main(){ const int a1 = 10; // a1是常量表达式。 const int a2 = a1 + 20; // a2是常量表达式 int a3 = 5; // a3不是常量表达式 const int a4 = a3; // a4不是常量表达式,因为a3程序的执行到达其所在的声明处时才初始化,所以变量a4的值程序运行时才知道。但编译没问题! return 0;}
以上代码可正常编译。
说明了const声明的不一定就是常量表达式!
C++11新标准规定,允许将变量声明为constexpr 类型以便由编译器来验证变量的值是否是常量表达式。constexpr
指定符声明可以在编译时求得函数或变量的值,声明为constexpr的变量一定是一个常量,而且必须用常量表达式来进行初始化。
例2:
#includeusing namespace std;int main(){ const int a1 = 10; // a1是常量表达式。 const int a2 = a1 + 20; // a2是常量表达式 int a3 = 5; // a3不是常量表达式 constexpr int a4 = a3; // a4不是常量表达式,因为a3程序的执行到达其所在的声明处时才初始化,所以变量a4的值程序运行时才知道。编译报错! return 0;}
constexpr int a4 = a3; 编译将报错!
例3:
#includeusing namespace std;int main(){ const int a1 = 10; // a1是常量表达式。 const int a2 = a1 + 20; // a2是常量表达式 int a3 = 5; // a3不是常量表达式 const int a4 = a3; // a4不是常量表达式,因为a3程序的执行到达其所在的声明处时才初始化,所以变量a4的值程序运行时才知道。编译报错! char arr1[a2]; // 没问题 char arr2['y']; // 没问题,'y'的ASCII码为121,相当于 char arr2[121]; char arr3[a4]; // 编译报错,因为a4不是常量表达式 return 0;}
以上是"如何区分C++常量表达式、const、constexpr"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
表达式
常量
编译
变量
程序
所在
问题
运行
C++
内容
篇文章
代码
价值
兴趣
函数
小伙
小伙伴
就是
明了
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
无线网络技术开放
药智数据基本药物目录查询数据库
魔兽世界频繁切换服务器卡
服务器u盘安装系统
网络安全法管理对象主体
网络安全防护功能宽度分配
有关网络安全的协议
专业网络技术供应
网络技术答案两面性
关于网络安全法的意义是什么
网络安全意识不到位原因分析
为什么使用代理服务器
软件开发测试视频
服务器维护安全机制
编写web对数据库操作
我的世界租借服务器公告栏指令
漫画软件开发 桥
奶块手游炼金服务器怎么样
软件开发应该考计算机的什么
陕西西安网络安全厂商
中兴服务器管理口恢复默认
软件开发 mac型号
江苏优质订货软件开发
软件开发速度 估算
温州火星人网络技术有限公司
中梁互联网科技有限公司
安塞网络安全
我的世界租借服务器公告栏指令
公安网络安全隐患排查
路由器网络安全协议