【constexpr及字面值常量类】

本文探讨了C++中的constexpr特性,包括其定义、字面值类型、constexpr类型的使用以及constexpr函数的要求。重点介绍了如何创建和使用字面值常量类,以确保在编译期间计算其值。
摘要由CSDN通过智能技术生成

constexpr相关

常量表达式

  • 常量表达式是指值不会改变且在编译过程就能得到计算结果的表达式
    Tag
  1. 字面值常量属于常量表达式
  2. 用常量表达式初始化的const对象也是常量表达式

constexpr类型

在复杂系统中,很难分辨一个初始值是不是常量表达式,所以允许将变量声明为constexpr类型以便编译器来验证变量是否是一个常量表达式。
一般来说,如果我们认为变量是一个常量表达式,就应该把它声明为constexpr类型

字面值类型

对声明constexpr时用到的类型称为字面值类型。有算术类型、引用和指针,不算的有自定义类、IO库、string类型等。特别的:constexpr作用于指针时相当于是顶层const指针。

constexpr函数

constexpr函数:能用于常量表达式的函数
约定如下:

  • 函数的返回值及参数类型都是字面值类型
  • 函数体中必须有且只有一条return语句(C++14后可以包含非返回语句的其他语句)
    Tag:我们允许constexpr函数的返回值并非一个常量。仅当函数的实参是常量表达式时,它的返回值才是常量表达式

字面值常量类

此类的实例能够在编译时作为常量表达式求值
符合下述要求的类时字面值常量类:

  • 数据成员都必须是字面值类型
  • 类必须至少含有一个constexpr构造函数(constexpr构造函数的函数体一般为空)
  • 如果一个数据成员有类内初始值,则内置类型成员的初始值必须是一条常量表达式;如果成员属于某种类类型,则初始值必须使用成员自己的constexpr构造函数
  • 类必须使用析构函数的默认定义
  • 或者该类为聚合类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值