常量表达式,是指值不会变并且在编译的时候就已经能够计算出结果的表达式。

字面值属于常量表达式,用常量表达式初始化的const变量也是常量表达式。

一个对象是或不是常量表达式,要根据他的数据类型初始值共同决定!

int a = 42;
const int b = size();

上面的a和b都不是常量表达式!不过b要想是常量表达式的话只要满足size()是constexpr函数就行! 

constexpr变量

声明为constexpr的变量一定是一个常量!而且必须要用常量表达式进行初始化!

constexpr int a = 20;
const int limit = a+2;

constexpr只对指针有效,也即是说,constexpr声明的指针是指针的顶层const。也就是说,指针是常量指针,那究竟它所指向的值是否是常量那就不确定了!constexpr指针是常量指针,不能指向定义在函数体内的变量!因为这些变量一般来说并非存在固定地址中

int a = 42;
constexpr int* op = &a;

a是普通变量,值为42,op是常量指针,op指向a;


constexpr int b = 32;
constexpr int* ok = b;

b是常量表达式,值为32,ok是常量指针,指向常量b;


constexpr函数

函数的返回值和参数类型都必须是字面值类型(指针,引用,算术类型)

函数体中必须只能有一条return语句;

constexpr int size_ss() {return 42;}constexpr int a = size_ss(); //正确

隐式被声明为内联函数。可以多次定义,为了保持多个定义的完全一致!所以定义在头文件中

48.聊一聊constexpr变量相关推荐

  1. C++ 11 新特性: constexpr变量和constexpr函数

    constexpr变量 字面值类型包括算术类型.引用.指针.枚举和数据成员都是字面值类型的聚合类. 聚合类的定义: 所有成员都是public的.     没有定义任何构造函数.     没有类内初始值 ...

  2. C++ Primer 5th笔记(2)chapter 2变量和基本类型:constexpr 、auto、类型别名、decltype

    1.constexpr和常量表达式 1.1 常量表达式 定义:变量的值在编译器的时候就可以得到是一个常量 eg. const int i = 0; 1.2 constexpr变量 让编译器来验证变量的 ...

  3. C++primer 第 2 章 变量和基本类型

    2.1 基本内置类型 算术类型(arithmetictype)和空类型(void)在内的基本数据类型.其中算术类型包含了字符.整型数.布尔值和浮点数.空类型不对应具体的值,仅用于一些特殊的场合,例如最 ...

  4. C++11 constexpr使用

    C++11为了提高代码执行效率做了一些改善.这种改善之一就是:生成常量表达式,允许程序利用编译时的计算能力.假如你熟悉模板元编程,你将发现constexpr使这一切变得更加简单.constexpr使我 ...

  5. Xamarin.Forms教程下载安装JDK配置环境变量

    Xamarin.Forms教程下载安装JDK配置环境变量 Xamarin.Form环境配置下载安装JDK JDK是编程Java程序必须的软件.也许有人会问我们用的C#为什么还有Java呢?这是因为我们 ...

  6. C++11- const, const expression和constexpr

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105042988 c ...

  7. constexpr函数

    有点难理解权且记住,使用才会体会其中真正的差别. 常量表达式的概念:在编译期就可以计算出结果的表达式. 那么为什么要用常量表达式呢,用常量表达式会有什么好处: 1.允许一些计算只在编译时进行一次,而不 ...

  8. [C/C++] constexpr函数

    常量表达式是指值不会改变并且在编译过程就能够得到计算结果的表达式.显然,字面值属于常量表达式,用常量表达式初始化的 const 对象也是常量表达式.如下: const int max_num = 20 ...

  9. 指针、引用以及const限定符、constexpr限定符

    文章目录 复合类型 引用 概念与使用 引用的定义 注意 指针 概念 声明方式 取地址符 指针值 空指针 利用指针访问对象 赋值和指针 void* 指针 指向指针的指针 指向指针的引用 初始化所有指针 ...

最新文章

  1. ctf-cybrics
  2. ActionT和FuncT委托
  3. 关于Android 中 一个错误的解决办法 “Do not request Window.FEATURE_ACTION_BAR.....
  4. php约束型,PHP类型约束用法示例
  5. leveldb 安装及使用
  6. Using Delegates with Data Readers to Control DAL Responsibility[转]
  7. 计算机应用网络工程师的英文名字,网络工程师英文简历
  8. 【iCore4 双核心板_ARM】例程三:EXTI中断输入实验——读取ARM按键状态
  9. AD15PCB快速布局元器件
  10. “熵减”之下,欧瑞博填补全屋智能国产操作系统空白
  11. cropper.js使用
  12. 0910期即将上市:优秀产品三部曲
  13. 计算机类绘图的文献,绘图计算机论文,关于机械制图计算机绘图的有效融合相关参考文献资料-免费论文范文...
  14. Python中find_elements以及presence_of_element_located的用法
  15. 微软云游戏服务器,微软:云游戏服务Project xCloud将扩展游戏服务的数量和地区...
  16. 2022年全球与中国COB发光二极管行业发展趋势及投资战略分析报告
  17. 图卷积网络原理(二)【图信号与图的拉普拉斯矩阵】
  18. 替换MP9486A 替代MP4689 替换LM5007 LM5017 国产芯片内置150V做降压恒压4.2V GPS防盗器专用芯片
  19. istat menus 序列号
  20. 中国如何应对非传统网络安全风险?

热门文章

  1. 重绘Winform窗体
  2. js获取上传文件内容
  3. 随机产生长度为20的字符串(数字和大小写字母)
  4. mysql查询更新时的锁表机制分析
  5. C# 通用Clone
  6. div内容设float之后,div的自动高度适应
  7. windows 7 安装及.net开发环境搭建
  8. OBS集成WebRTC
  9. 【C++ Primer】自己动手编写函数 atoi(char *str)
  10. Linux系统监控之磁盘I/O篇