三.constexpr关键字(从C到C++)

内容参考于《21天学通C++》(第八版)

三.constexpr关键字

1. 示例
#include <iostream>
constexpr double GetPi() { return 22.0 / 7; }
constexpr double TwicePi() { return 2 * GetPi(); }

int main()
{
	using namespace std;
	const double pi = 22.0 / 7;

	cout << "constant pi contains value " << pi << endl;
	cout << "constexpr GetPi() returns value " << GetPi() << endl;
	cout << "constexpr TwicePi() returns value " << TwicePi() << endl;
	return 0;
}

运行结果

constant pi contains value 3.14286
constexpr GetPi() returns value 3.14286
constexpr TwicePi() returns value 6.28571

这个程序演示了两种计算 pi 值的方法:一是在第 8 行声明常量 pi;二是在第 2 行声明常量表达式 GetPi()。 GetPi()和TwicePi()看起来像函数,但其实不是函数。函数在程序执行期间被调用,但GetPi()和 TwicePi()是函数表达式,编译器将每个 GetPi()都替换成了 3.14286,并将每个TwicePi()都替换成了 6.28571。通过在编译阶段对 TwicePi()进行解析,程序的执行速度比将这些计算放在函数中时更快。

2. 作用

通过关键字 constexpr,可让常量声明像函数,通过英文可以看出来:const常量+expr表达式。常量表达式看起来像函数,但在编译器和应用程序看来,它们提供了优化可能性。只要编译器能够从常量表达式计算出常量,就可在语句和表达式中可使用常量的地方使用它。他的实质还是const或者是常规函数。

3. 常规函数

使用 constexpr 并不能保证一定会进行编译阶段优化。例如,如果您使用常量表达式来计算用户输入的数字的两倍,由于编译器无法计算这种表达式的结果,因此它们可能忽略关键字 constexpr,进而将常量表达式视为常规函数进行编译。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值