C++ 之constexpr、常量表达式与字面值类型关系以及使用常量表达式的原因
constexpr与常量表达式、字面值类型、以及使用常量表达式的原因
目录
constexpr与常量表达式、字面值类型、以及使用常量表达式的原因
constexpr、常量表达式与字面值类型之间关系
为什么使用常量表达式?
优化之常量折叠:
与之相似的内联函数的理解:
constexpr、常量表达式与字面值类型之间关系
① constexpr类型确保初始值为常量表达式,编译器验证(const不能 只有漆初始值是常量表达式才行 但无法确定)
PS:认定变量是常量表达式时,将变量声明为constexpr类型。尽量用 constexpr代替define……
② 字面值类型是声明constexpr时用到的类型,包括算术类型(eg.int、double…)、引用、指针、字面值常量类(聚合类、等)……
constexpr int a = 4; //int 是字面值类型 ,4是int类型的字面值常量(也是常量表达式)
③ 常量表达式(const expression)即:表达式值不变(由数据类型决定)+ 编译期计算出结果(由初始值决定)
对象 和 表达式 都可以是常量表达式
④ 字面值常量:每个字面值常量都对应一种数据类型 整形字面值 浮点 布尔 字符 字符串 指针…
eg. 1 ; true , false; nullptr , 0;
为什么使用常量表达式?
优化之常量折叠:
常量折叠:把代码优化为在编译期计算出结果,将结果作为常量嵌入最终生成代码。
可以减少最终程序执行指令条数,避免将常量表达式译为机器码,交由最终程序解决(会增加运行时开销)。
In fact, the FrontEnd will cope with pretty much any arithmetic expression involving constants (even values such as sizeof, as above, so long as they can be evaluated at compile-time)and operators + -* / % << >> ++ and- -. You can even throw in bools, logical operators, ifs and ?:
即还会处理许多常量,包括sizeof类型的常量,还有操作符+ -* / % << >> ++ --、甚至bool、逻辑运算符、if、三目运算符
更多细节在这
C++ 之constexpr、常量表达式与字面值类型关系以及使用常量表达式的原因相关推荐
- 3.内存分配、逃逸分析与栈上分配、直接内存和运行时常量池、基本类型的包装类和常量池、TLAB、可达性分析算法(学习笔记)
3.JVM内存分配 3.1.内存分配概述 3.2.内存分配–Eden区域 3.3.内存分配–大对象直接进老年代 3.3.1.背景 3.3.2.解析 3.4.内存分配–长期存活的对象进去老年代 3.5. ...
- The New C++ -- 基本数据类型和字面值常量 (5. 宽字符类型和宽字符字面值常量)
注意:本章节内容设计C++11,其中部分内容可能还没有被所有编译器支持. 随着计算机技术的发展,软件国际化是不可避免的趋势.ASCII所支持的最多256种字符已经远远不能满足国际化的需求.对我们来说, ...
- 表达式树 java_Linq表达式树编译非平凡的对象常量,并以某种方式引用它们
通常,在编译表达式树时,我会想到不是基元类型或字符串的常量是不可能的 . 但是,这段代码: public class A { public int mint = -1; } public static ...
- 按我的理解string似乎不是字面值类型,但为什么《c++ primer》习题7.55答案说Data类是集合类呢?
按我的理解string似乎不是字面值类型,但为什么<c++ primer>习题7.55答案说Data类是集合类呢?Data类定义如下: struct Data{ int ival; str ...
- Java默认类型,类型转换,常量与变量笔记
默认类型: 在java里整数默认是int类型,小数默认是double类型,单个字符默认是char类型,true.false自然默认的是boolean类型,字符串默认的是String类型. 变量和常 ...
- C++基础学习(02)--(数据类型,变量类型,变量作用域,常量,修饰符类型)
文章目录 目录 一. 数据类型 C++ 中的数据类型 typedef enumeration枚举类型 c++中变量类型 二.变量作用域 三.常量 四.修饰符类型 目录 一. 数据类型 C++ 中的数据 ...
- 常量表达式不允许函数调用_SQLite特殊索引之表达式索引
通常,SQL索引引用表的列.但是也可以在涉及表列的表达式上形成索引. 例如,请考虑下表跟踪各种"帐户"的美元金额变化 CREATE TABLE account_change( ch ...
- 6 数据的表现形式常量以及常量的几种类型
数据的表现形式常量以及常量的几种类型 摘要:数据的表现形式常量以及常量的几种类型,结合常量类型编写程序求长方形的面积: 一.常量 (基础教材第24页) 常量:在程序运行过程中,其值不能被改变的量. 整 ...
- 通过创建动态类型 动态构建Expression Select表达式来控制Property可见性
通过创建动态类型 动态构建Expression Select表达式来控制Property可见性 项目中经常遇到的一个场景,根据当前登录用户权限,仅返回权限内可见的内容.参考了很多开源框架,更多的是在V ...
最新文章
- linux作业控制三个,10个linux 作业控制的bash 脚本实例
- 搞懂正则表达式之进阶篇
- 光环大数据spark文档_推荐大数据Spark必读书目
- html 浮动窗口置顶,jQuery简单实现页面元素置顶时悬浮效果示例
- 程序语言python的优化版_从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例...
- PolkaFoundry等成立Polkadot区块链开发协会(PBDA)
- mysql 开发进阶篇系列 23 应用层优化与查询缓存
- AI永远不可能产生意识
- [转]网络安全设备Bypass功能介绍及分析 - [网络编程]
- ToStringBuilder、HashCodeBuilder、EqualsBuilder、ToStringStyle、ReflectionToStringBuilder等学习...
- android brvah 分组,Android开源框架BRVAH由来篇
- 数据库:主键外键作用
- 山一程,水一程,身向榆关那畔行,夜深千帐灯。
- 抖音自动生成文字_抖音视频怎么加文字
- 中英三校合作开发新电池结构,可用于改善可穿戴设备体验
- java文字类小游戏2.0版本
- 邻接表/图/DFS/BFS
- 2015.03.19---PHP XCAP开发,PHP XML导出, PHP数组的操作,PHP反射机制
- 货车进货路线问题java代码实现_货车出行路线规划-出行路线规划-开发指南-Android 地图SDK | 高德地图API...
- 这18款作品斩获2020 Qualcomm XR 创新应用挑战赛奖项
热门文章
- 【腾讯TMQ】悄悄问女儿,圣僧美不美——记鹅厂测试人的一天
- 基金申请书写作的2种经验,你必须知道
- Centrifugal Chiller - Fundamentals
- EclipsePHP Studio使用设置笔记
- oracle登录tns串区别,tns 连接问题
- [USACO 2021.02 Feb]Problem 3. Clockwise Fence
- SPL-安装与基本使用(二)
- 弹窗广告关不掉退不出 你的手机App里暗藏多少“牛皮癣”?
- Optane+NAND方案势如破竹。
- 再不懂时序就 OUT 啦!,DBengine 排名第一时序数据库,阿里云数据库 InfluxDB 正式商业化!...