C++ constexpr类型

本文详细解读了C++11中的constexpr特性,包括什么是常量表达式,constexpr变量的定义与限制,以及constexpr函数的使用规则。重点介绍了如何确保变量和函数在编译时计算其值,并通过实例说明了哪些情况下可以使用constexpr。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

constexpr 变量

C++11 规定,允许将一个变量声明为 constexpr 类型以便有编译器来验证变量的值是否是一个常量表达式。

常量表达式: 值不会改变且在编译过程就得到计算结果的表达式。
如: 字面值(加 const)、常量表达式初始化的 const对象。
const int max_files = 20; // 是.
const int limit = max_files + 10; // 是
int file_size = 20; // 不是

constexpr 变量必须是常量,且必须用常量表达式初始化。

constexpr int mf = 20;		// 20 是常量表达式
const int limit = mf + 10;	// mf + 10 是常量表达式

constexpr 函数

能用于常量表达式的函数。

约定:
函数的返回值类型及所有形参类型都是字面值类型,且函数体中有且只有一条return 语句。

字面值类型:
算术类型、引用和指针都属于;【某些类也可是字面值类型】
而IO库、string 类则不属于。

constexpr int new_sz() { return 42; }
constexpr int foo = new_sz();	// 对. foo是一个常量表达式。

注意

  • constexpr 函数体内也可以有其他语句,但要保证这些语句在运行时不执行任何操作…

  • 允许 constexpr 函数返回一个非常量:

constexpr size_t scale(size_t cnt) { return new_sz() * cnt; }
// 当参数是常量表达式,返回值也是常量表达式,反之不是。
int arr[scale(2)];	// 对。scale(2) 是常量表达式;
int i=2;		// i 不是常量表达式;
int a2[i];		// 错。scale(i) 不是常量表达式;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值