一.#define 是预处理操作符(宏定义),编译器将在编译过程中用到该变量的地方替换成对应的值。

二.Const

const是声明常量的限定符,它可以约定一个变量为常量。

如:

Const int buffsize = 1024;

编译器将在编译过程中用到该变量的地方替换成对应的值,这个效果和#define,constexpr是一致的。

const常量只有在const int a = 1;这种形式下才会在编译期发生用值取代变量。

注意:默认情况下,const对象被设定成为仅在文件内有效。如果多个文件出现同名const变量,实际上是不同文件分别定义的独立的变量。

相关知识:

const在引用和指针的复合类型中可划分为顶层const,底层const。

如:

Const int a = 0; // 这是顶层const
Const int &b = a; // 这是底层const
Const int * const pa = &a; // 左边的const是底层const,有边的const是顶层const

三.Constexpr

① Constexpr意为常量表达式,是指值不会改变并且在编译期就能得到计算结果的表达式。声明为constexpr的变量必须要用常量表达式初始化。

如:

Const int max = 20;
Constexpr int k = max;
Constexpr int f = size(); // size函数必须是constexpr函数,即足够简单以致在编译期就能得到结果(如只有一个return语句),返回类型是constexpr的函数。

注意:

constexpr函数在包含形参时,只有实参是常量表达式时,函数调用才是常量表达式。

与const的区别:

const虽然是声明为常量,但不承诺一定在编译期初始化该变量,也即是可以在运行时在执行初始化。

如:

Const int a = f(); //f在运行期才知道返回结果

②constexpr与内联函数

为了在编译期过程中随时展开,constexpr函数被隐式的指定为内联函数。编译器要展开这俩种函数必须要知道定义,因为constexpr和内联函数都可以多次定义,但定义必须一致,故一般将定义放在头文件。

C++Primer学习之二#define,const,constexpr相关推荐

  1. C++Primer学习笔记(二)

    17.string对象中字符的处理: cctype头文件中定义: isalnum(c) 如果c是字母或数字,则为true isalpha(c) 如果c是字符,则为true iscntrl(c) 如果c ...

  2. C++ Primer 学习笔记(第四章:表达式)

    2019独角兽企业重金招聘Python工程师标准>>> ##C++ Primer 学习笔记(第四章:表达式) [TOC] ###4.1 基础 左值和右值: 当一个对象被用作右值的时候 ...

  3. OpenCV示例学习(二): 基本图形绘制算子:line(),circle(),fillPoly(), ellipse()

    OpenCV示例学习(二): 基本图形绘制算子:line(),circle(),fillPoly(), ellipse() #include <opencv2/opencv.hpp>usi ...

  4. STM32学习心得二十一:实时时钟RTC和备份寄存器BKP特征、原理及相关实验代码解读

    记录一下,方便以后翻阅~ 主要内容 1) RTC特征与原理: 2) BKP备份寄存器特征与原理: 3) RTC常用寄存器+库函数介绍: 4) 相关实验代码解读. 实验内容: 因为没有买LCD屏,所以计 ...

  5. Linux SMP启动流程学习(二)

    Linux SMP启动流程学习(二) 3 SMP系统启动流程 3.1 SMP启动判断 源码:/arch/arm/kernel/setup.c 调用:start_kernel() -> smp_s ...

  6. FFmpeg学习之二 (yuv视频渲染)

    FFmpeg学习之二 (yuv视频渲染) yuv简介 1.yuv是什么 2.yuv采集方式 3.yuv存储方式 4.yuv格式 yuv视频渲染 1. iOS YUV视频渲染 1.1 IOS利用open ...

  7. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  8. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  9. C++Primer学习笔记:第2章 变量和基本类型

    空类型不对应具体的值,仅用于一些特殊的场合 long的长度为32位,float有7个有效位,double有16个有效位 如果数值超过了int的范围,应该用long long而不是long,long一般 ...

最新文章

  1. [python]_ELVE_pip2和pip3如何共存
  2. Unexpected key(s) in state_dict: module.backbone.bn1.num_batches_tracked
  3. 【深度学习】图像特征提取与通道数问题(基于U型网络)
  4. 每个程序员都应该挑战的6个项目
  5. 队列表mysql,什么是在mysql中实现消息队列表的最佳方法
  6. dos命令行设置网络优先级_计算机网络故障及其维修方法
  7. win7操作系统上,批处理文件,直接双击的时候,能运行起来。但是以管理员身份运行的时候,都闪退。请问,这是怎么回事?...
  8. html5 心跳效果,css3实现心脏跳动
  9. Oracle date日期类型使用
  10. 分奇偶数c语言_小白学写字(C语言)
  11. 如何用Baas快速在腾讯云上开发小程序-系列3 :实现腾讯云COS API调用
  12. @程序员,React 使用如何避坑?
  13. 如何开发与设计一个爆款小游戏
  14. etcd v2文档(2) -- 客户端http请求管理集群成员api
  15. url传值的一个问题解决
  16. 宏脉系统怎么改服务器地址大全,宏脉系统使用手册大全新.doc
  17. 怎样把word文档里的html格式去掉,word文档去除格式
  18. 一场对爱情的反思《少有人走的路:心智成熟的旅程》
  19. postman更换皮肤
  20. nandwrite 参数

热门文章

  1. db h2 数据类型_H2Database数据类型
  2. 地线与接地螺丝_电气接地的规范要求及接地的各项参数,收藏!
  3. 二元一次函数最值问题_初二上学期,一次函数方案设计最值问题,两类题目解题思路不一样...
  4. 2059 - authentication plugin 'caching_sha2_password' -navicat连接异常问题解决
  5. 计算机网络技术三级做题技巧,三级网络技术——我的经历,我的技巧
  6. Microsoft Visual Studio 无法启动程序“路径啪啦啪啦“. 系统找不到指定的文件。
  7. 学习《数据结构》要爬的第一步梯子
  8. 用python实现时间的动态(动态时钟)+ 算出某年某月星期几的所有日期
  9. matplotlib setting zh-hans
  10. 前端页面-不可编辑控制