C++ 11: constexpr

目的:常量表达式中可以被调用的足够简单的函数,和用户自定义的类型常量对象可以使用足够简单的构造函数创建。

常量表达式

首先明确一个概念, const expression (常量表达式),指的是在编译器可以被求值的表达式。可以在如下的场合使用:

  1. 数组大小,switch case的值,枚举值的定义
  2. 模板参数的非类型的特化的值
  3. 静态存储对象的静态初始化

常量表达式函数

一个函数如果是常量表达式函数,它需要满足

  • 有返回值,级不能 return void
  • 它的函数体仅为 return expr; 形式,即仅可有一条简单的 return语句 。expr 是一个常量表达式。
  • 使用 constexpr修饰

一个常量表达式函数可以被一个非常量表达式调用,此时,常量表达式函数并不需要保证能够在编译器求值。
常量表达式函数不支持递归。

常量表达式数据

常量表达式数据指的是使用constexpr声明的变量或者数据成员。其必须被常量表达式初始化,或者是被常量表达式构造函数(其参数也应为常量表达式)创建的右值。

使用constexpr的声明的变量和数据成员行为上类似使用const声明的变量和数据成员,除了前者在使用之前需要初始化和它必须使用常量表达式来初始化。

常量表达式构造函数

常量表达式构造函数需要满足以下几点:

  • constexpr 指示符修饰的构造函数
  • 使用初始化列表时,初始化列表的值都应为常量表达式。
  • 函数体为空
    使用常量表达式构造函数(参数也为常量表达式)构造的用户自定义类型的对象,称为用户自定义常量。

你可能感兴趣的:(C++ 11: constexpr)