constexpr有什么用

发布时间 2023-06-23 14:47:32作者: 烤肉kr

简介

constexpr是C++11引入的关键字。它的意思是常量表达式,但是与之前的常量const不同,constexpr会在编译期就计算完该值,从而提高了性能。同时constexpr也可以用来修饰函数、类的构造函数等,不止是变量。

适用于constexpr的类型

根据微软的文档,只有文本类型或者返回文本类型的函数能被指定为constexpr
文本类型:

  • 标量类型:算术类型 (整型或浮点值) 、枚举类型成员、指针类型、指针到成员类型和 std::nullptr_t。 基本类型通常是标量类型。
  • void
  • 引用。
  • 引用的数组。
  • 具有普通析构函数以及一个或多个 constexpr 构造函数且不移动或复制构造函数的类。 此外,其所有非静态数据成员和基类必须是文本类型且不可变。

constexpr函数

constexpr函数的返回值可以用来初始化constexpr变量。
constexpr函数,如果给他传参是常量表达式,那么他会返回constexpr,否则它就和正常函数一样工作。

一个例子

constexpr int a_len()
{
	return 5;
}

constexpr int fibonacii(const int n)
{
	return n == 1 ? n : n * fibonacii(n - 1);
}

int main()
{
	char arr[a_len()]; // 合法
	constexpr int f = fibonacii(5); // 编译期完成计算
	return 0;
}