Const限定符与C++11Constexpr的区别

本文深入探讨了C/C++中的Const和constexpr限定符的区别与用法。Const限定符用于声明不可更改的变量,而constexpr则提供了更强大的静态计算能力,不仅能够确保变量不可更改,还能在编译时进行求值,从而提升程序运行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;				//替换成了字面值

这样做的话提升了运行速度,因为省去了内存寻址等操作!

编译器可以在生成的表里找到该变量名与类型和对应的值,完成很轻松的替换工作!就例如宏一样!

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

17岁boy想当攻城狮

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值