《C++11标准库》3.1.8关键字constexpr与const

本文探讨了C++11引入的constexpr关键字,如何在编译期确定表达式的值,与const的区别,以及其在数组大小计算和常量声明中的应用。重点讲解了constexpr修饰的常量和函数的特性,以及它们在提升代码效率中的作用。
摘要由CSDN通过智能技术生成

自 C++11起,constexpr 可用来让表达式核定于编译期。例如:

constexpr int square (int x)
{
    return x*x;
}

float a[square(9)];//此数组大小为81

这个关键字修正了在C++98中使用数值极限时出现的问题,在C++11之前,如下代码:

std::numeric_limits<short>::max()

无法被用作一个常量,虽然他在功能上等同于宏 INT_MAX。如今,在C++11中,这样的一个式子被声明为constexpr,于是,你可以声明array或进行编译期运算。

例如:

std::array<float,std::numeric_limits<short>::max()> a;

const 的基础用法:

const的作用:

1.对变量声明只读特性,以保护值以防被修改。(const 声明的变量只能作为右值而不能做值)。

2.const 修饰的变量在程序运行过程中只有一份拷贝,避免了不变要的内存分配。

3.编译器不为普通的const常量分配储存空间,而是将他们保存在符号表中,这使得它成为了一个编译期常量,在程序期间不用进行频繁的储存和读取内存操作,提高程序的与运行效率。

const 与 constexpr 的区别:

对于 const 没有区分出定义的常量(函数)是编译期常量(函数)还是运行期常量(函数)

对于 constexpr 修饰的常量一定是在编译期常量,但修饰的函数返回值却不一定是编译期常量。

对于constexpr 修饰的函数,如果返回值可在编译期计算出结果,那么在编译器便会在编译期进行计算,若不能得出结果,则就是运行期计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值