Const限定符与C++11Constexpr的区别
Const限定符:
属于标准C里的限定符,负责将变量、对象转换成一个字面值常量,值得注意的是,Const限定符只能在编译期间被确定为字面值常量,但是在运行阶段还是会为其分配内存而不是存在于代码段中,也就是经常说的立即数,所以我们可以通过指针间接寻址改变它的数值!
Const限定符属于编译器的管辖范围,只有在编译阶段编译器会检查是否有对Const限定符修饰的变量被尝试直面的改变,如果有会报错。
Const限定符修饰的变量必须初始化否则会报错!
列如:
const int test = 6; √
const int test; ×
并且初始化之后在编译器看来他就是一个字面值常量不可以被修改!
列如:
const int test = 6;
test = 2; ×
引入const修饰符的好处在于可以有效的防止存放一些不想被改变数据的变量被程序员不小心的改变!
在编写大工程时Const会显得尤为重要,大型工程会高达上万个变量,其中一些变量用来存放一些关键数据,不能被改变,但是往往大型工程是团队合作的,所以即使你知道这个变量不能被改变,但是你的合作伙伴不知道!
为什么不用宏代替?
答:有些数据会在运行期间获得,但是这些数据一旦获取了就不想被改变了,宏在预编译期间就会被替换删除!
以上是本人在开发过程中体验到的!
constexpr限定符:
constexpr是C++11标准语法里的一个修饰符!使用它的好处在于提高运行速度,且拥有const的功能,同时也是属于编译器的管辖范围!
为什么说它提升运行速度?
首先通过我预编译发现:
Const限定符修饰的变量,在被当做右值赋值操作时会被直接替换成字面值常量!
列如:
constexpr int test = 6; // constexpr与const一样需要初始化
int a = test;
预编译:
constexpr int test = 6; // constexpr与const一样需要初始化
int a = 6; //替换成了字面值
这样做的话提升了运行速度,因为省去了内存寻址等操作!
编译器可以在生成的表里找到该变量名与类型和对应的值,完成很轻松的替换工作!就例如宏一样!
Const限定符与C++11Constexpr的区别相关推荐
- C++primer :const限定符
1.问题引入 <span style="font-size:18px;"><span style="font-size:18px;">f ...
- 指针、引用以及const限定符、constexpr限定符
文章目录 复合类型 引用 概念与使用 引用的定义 注意 指针 概念 声明方式 取地址符 指针值 空指针 利用指针访问对象 赋值和指针 void* 指针 指向指针的指针 指向指针的引用 初始化所有指针 ...
- C++primer第二章2.4节对于const限定符相关内容进行详解
const限定符 const对象一旦创建后其数值就不会被再次改变,因此const对象必须初始化. const对象只在文件中有效 在不同的文件中使用不同的const来定义不同的常量,那么每个文件定义的变 ...
- C++ 语法 const限定符
const限定符是常用且容易混淆的概念,很多书中讲解不清晰,甚至<C++ primer>中都有一些错误的论断或者不明确的区分,本文对const限定符做归纳总结. 一.在类型中 顶层cons ...
- 指针和Const限定符
指针和Const限定符 1.指向const对象的指针 如果指针指向的是const对象,则不允许使用指针来改变其所指的const值.C++要求指向const对象的指针具有const特性. const d ...
- php+条件限定符,const 限定符
const 限定符 const 对象一旦创建后不可改变,所以const必须初始化. const int i=get_size(); //运行时初始化 const int j=43; const int ...
- C++的const限定符
const限定符总是让人很头疼,下面讲解一下几个比较容易混淆的概念: 对常量的引用(常量引用): 一般情况下,引用的类型要与其所引用的对象的类型一致,其中的例外情况就是,当初始化常量引用时,允许用任意 ...
- C++ const限定符和auto类型说明符
const限定符 # 1.限定常量 有时我们希望定义这样的变量:它的值不能被改变.为了满足这一要求,我们使用const对变量的类型加以限定: const int bufSize = 512; 这样就把 ...
- c++ const限定符
const限定符 const对像一旦创建,其值就不能发生改变.const对象必须初始化 const int i = get_size();//正确,运行时初始化. const int j = 1;// ...
最新文章
- IDEA下spring boot项目打包war包部署外部tomcat问题
- python的循环控制语句有_关于Python中的for循环控制语句
- LoadRunner中常见参数和变量
- 目标检测--边界框(bounding box)解析
- 第7章:项目成本管理习题总结
- 关闭linux终端,查看、关闭登录到linux的终端
- [C++ Mind Map] class and memory
- squid代理服务器在企业网中的应用
- linux 查找文件_LINUX常用命令全集
- jQuery实例——表格隔行换色
- 高通QFIL刷机 安装9008驱动
- 如何把代码写的更优雅,你需要这一份代码精进书单!
- 平板电脑怎么打开HTML,为什么平板电脑和笔记本电脑打开网页不一样,感觉平板电脑就是手机?...
- 被华策、欢瑞等甩下,唐人影视往日荣光已成回忆?
- Python基础入门知识(1)
- 笔记本计算机回收站在哪里,电脑回收站不见了怎么办 四种方法教你快速解决问题【图文教程】...
- photoshop中如何在6寸相纸上打印1寸照片12张3X4模式(手动拖动模式)
- 纯CSS实现三角形图标
- stc89c52rc转移到面包板,使用oled屏
- 研究生生涯的一些经验和感悟
热门文章
- pandas怎么去除nan_pandas缺失值处理之——如何消去Nan值对数字型字符串数据类型的影响,让数字型字符串保持原始str类型,而不会自动变为float类型?...
- 记录一次 自建网盘程序 cloudreve被攻击
- 进阶16 网络编程入门
- MySQL安装和修改密码
- echarts echarts.js:440 Uncaught TypeError: Cannot read properties of null (reading ‘toFixed‘)
- Java 核心 API 必须掌握的程度
- 存储设备映射Linux服务器,青云oss对象存储映射至linux服务器
- echarts y轴只显示5个刻度_ECharts 解决双Y轴刻度不一致问题
- @enableautoconfiguration注解作用_如何让代码变“高级”-Spring组合注解提升代码维度(这么有趣)...
- css手型指针_前端基础面试题(HTML+CSS部分)