C++中的constexpr

本文探讨了C++中的`constexpr`和`const`关键字。`#define`是预编译时期的简单替换,而`const`强调只读性,但可通过`const_cast()`等方式在运行时改变其值。`constexpr`则保证变量在编译时期即可确定,用于优化。对于`const`修饰的指针,其行为取决于`const`的位置。`constexpr`修饰的函数能返回常量表达式,适用于编译时计算。
摘要由CSDN通过智能技术生成

  在C++中有#define 哟const 有 constepr等不同的关键字,他们之间有相似的地方,也有不同的地方。


 首先是#define 关键字,这个只是在预编译之前的简单替换、


 const 关键字修饰的更多的表达的是一种readonly的意思,就是只读。这个不一定是常量,但是一定是不可以读取,const变量的初始化可以在运行的时候确定,他只是限制了在运行的时候只可以读取, 实际上const变量在运行的时候也可能是变化的,例如:通过const_cast()进行去除了const限定(对于const修饰的变量,依然是是只读的详情见[参考文献1]),或者是其他的方式修改了这个内存的值。。但是对于const修饰的变量来说,他只是可读的,这个两个并不是冲突的。同时const的变量的存放位置和一般的变量是没有太大的差别的,可以是栈,可以是堆,也可是是,.data段,.bss段。const只是表面这个变量只可以读取。

同时const修饰的指针是情况可以比较复杂,原则是const指针距离谁近就是修饰谁:

1 const int *p = &a;    

const 离 int 更近, 所以p这个指针本身可以改变,但是p所指向的内容,也就是 *p不可改变

2 int* const p = &a;

const 离 p更近近,也就是说p这个指针不可以改变,但是指向的内容是可以改变的的

3const int* const p = &a;

两个都修饰的了,都不可以改变

4 int const *p = &a;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值