C++ constexpr

C++11 关键字 constexpr

摘自 cppreference

跟const相似,修饰的值不能被改变。

constexpr 特点:constexpr指定的声明可以在编译时期求值,并且他的之不能被改变

                           但是 constexpr修饰的函数不一定能够在编译时期求值,如果他的参数能在编译时期求出来那么 函数值就在编译时期求出

                                 如是在参数是要在运行时期才能求出,那么函数就和普通函数一致。

constexpr变量必须满足下列要求:

constexpr函数必须满足下列要求:

  • 它必须非virtual
  • 其返回类型必须是字面类型LiteralType
  • 其每个参数都必须是字面类型LiteralType
  • 至少存在一组参数值,令函数的一个调用可以为已求值的核心常量表达式的子表达式(对于构造函数,在常量初始化器中使用就够了 (C++14 起))。不要求对此行为的诊断。

constexpr构造函数必须满足下列要求:

C++ 概念: LiteralType
指明一个类型为字面类型。字面类型是constexpr变量所拥有的类型,且它们能通过constexpr函数构造、操作及自之返回。
注意,标准没有定义拥有此名称的具名要求或概念。这是语言核心定义的类型。将它包含于此只是为了一致性。

要求

字面类型是是下列之一:

  • 可以有cv限定的void(从而constexpr函数能返回void);
(C++14 起)
  • 标量类型;
  • 引用类型;
  • 字面类型的数组;
  • 可有cv限定的类类型,并拥有下列全部属性:
  • 拥有平凡析构函数,
  • 是以下之一
  • 聚合体类型,
  • 或拥有至少一个constexpr构造函数(可为模板)且非复制或移动构造函数,
(C++17 起)
  • 对于联合体,至少有一个非静态成员函数是非volatile字面类型,
  • 对于非联合体,所有非静态数据成员和基类是非volatile字面类型。
(C++17 起)
  • 所有非静态数据成员和基类是非volatile字面类型。
(C++17 前)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值