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、常量表达式与字面值类型关系以及使用常量表达式的原因相关推荐

  1. 3.内存分配、逃逸分析与栈上分配、直接内存和运行时常量池、基本类型的包装类和常量池、TLAB、可达性分析算法(学习笔记)

    3.JVM内存分配 3.1.内存分配概述 3.2.内存分配–Eden区域 3.3.内存分配–大对象直接进老年代 3.3.1.背景 3.3.2.解析 3.4.内存分配–长期存活的对象进去老年代 3.5. ...

  2. The New C++ -- 基本数据类型和字面值常量 (5. 宽字符类型和宽字符字面值常量)

    注意:本章节内容设计C++11,其中部分内容可能还没有被所有编译器支持. 随着计算机技术的发展,软件国际化是不可避免的趋势.ASCII所支持的最多256种字符已经远远不能满足国际化的需求.对我们来说, ...

  3. 表达式树 java_Linq表达式树编译非平凡的对象常量,并以某种方式引用它们

    通常,在编译表达式树时,我会想到不是基元类型或字符串的常量是不可能的 . 但是,这段代码: public class A { public int mint = -1; } public static ...

  4. 按我的理解string似乎不是字面值类型,但为什么《c++ primer》习题7.55答案说Data类是集合类呢?

    按我的理解string似乎不是字面值类型,但为什么<c++ primer>习题7.55答案说Data类是集合类呢?Data类定义如下: struct Data{ int ival; str ...

  5. Java默认类型,类型转换,常量与变量笔记

    默认类型: 在java里整数默认是int类型,小数默认是double类型,单个字符默认是char类型,true.false自然默认的是boolean类型,字符串默认的是String类型.   变量和常 ...

  6. C++基础学习(02)--(数据类型,变量类型,变量作用域,常量,修饰符类型)

    文章目录 目录 一. 数据类型 C++ 中的数据类型 typedef enumeration枚举类型 c++中变量类型 二.变量作用域 三.常量 四.修饰符类型 目录 一. 数据类型 C++ 中的数据 ...

  7. 常量表达式不允许函数调用_SQLite特殊索引之表达式索引

    通常,SQL索引引用表的列.但是也可以在涉及表列的表达式上形成索引. 例如,请考虑下表跟踪各种"帐户"的美元金额变化 CREATE TABLE account_change( ch ...

  8. 6 数据的表现形式常量以及常量的几种类型

    数据的表现形式常量以及常量的几种类型 摘要:数据的表现形式常量以及常量的几种类型,结合常量类型编写程序求长方形的面积: 一.常量 (基础教材第24页) 常量:在程序运行过程中,其值不能被改变的量. 整 ...

  9. 通过创建动态类型 动态构建Expression Select表达式来控制Property可见性

    通过创建动态类型 动态构建Expression Select表达式来控制Property可见性 项目中经常遇到的一个场景,根据当前登录用户权限,仅返回权限内可见的内容.参考了很多开源框架,更多的是在V ...

最新文章

  1. linux作业控制三个,10个linux 作业控制的bash 脚本实例
  2. 搞懂正则表达式之进阶篇
  3. 光环大数据spark文档_推荐大数据Spark必读书目
  4. html 浮动窗口置顶,jQuery简单实现页面元素置顶时悬浮效果示例
  5. 程序语言python的优化版_从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例...
  6. PolkaFoundry等成立Polkadot区块链开发协会(PBDA)
  7. mysql 开发进阶篇系列 23 应用层优化与查询缓存
  8. AI永远不可能产生意识
  9. [转]网络安全设备Bypass功能介绍及分析 - [网络编程]
  10. ToStringBuilder、HashCodeBuilder、EqualsBuilder、ToStringStyle、ReflectionToStringBuilder等学习...
  11. android brvah 分组,Android开源框架BRVAH由来篇
  12. 数据库:主键外键作用
  13. 山一程,水一程,身向榆关那畔行,夜深千帐灯。
  14. 抖音自动生成文字_抖音视频怎么加文字
  15. 中英三校合作开发新电池结构,可用于改善可穿戴设备体验
  16. java文字类小游戏2.0版本
  17. 邻接表/图/DFS/BFS
  18. 2015.03.19---PHP XCAP开发,PHP XML导出, PHP数组的操作,PHP反射机制
  19. 货车进货路线问题java代码实现_货车出行路线规划-出行路线规划-开发指南-Android 地图SDK | 高德地图API...
  20. 这18款作品斩获2020 Qualcomm XR 创新应用挑战赛奖项

热门文章

  1. 【腾讯TMQ】悄悄问女儿,圣僧美不美——记鹅厂测试人的一天
  2. 基金申请书写作的2种经验,你必须知道
  3. Centrifugal Chiller - Fundamentals
  4. EclipsePHP Studio使用设置笔记
  5. oracle登录tns串区别,tns 连接问题
  6. [USACO 2021.02 Feb]Problem 3. Clockwise Fence
  7. SPL-安装与基本使用(二)
  8. 弹窗广告关不掉退不出 你的手机App里暗藏多少“牛皮癣”?
  9. Optane+NAND方案势如破竹。
  10. 再不懂时序就 OUT 啦!,DBengine 排名第一时序数据库,阿里云数据库 InfluxDB 正式商业化!...