首页 >后端开发 >C++ >可以使用 C 中的 Constexpr 函数初始化静态 Constexpr 成员吗?

可以使用 C 中的 Constexpr 函数初始化静态 Constexpr 成员吗?

Barbara Streisand
Barbara Streisand原创
2024-12-04 06:50:201063浏览

Can a Static Constexpr Member Be Initialized Using a Constexpr Function in C  ?

Constexpr 使用静态函数初始化静态成员

原始问题:

C 语言,是否可以从 a 计算 constexpr 值(编译时常量) constexpr 函数并将其存储为类的静态成员?

第一次尝试和编译器的响应:

第一次尝试在类并使用 foo 初始化静态 constexpr 成员 bar 失败,g -4.5.3 和 g 均出现错误-4.6.3.

解释:

根据 C 标准,可以使用大括号或等号在类定义中初始化静态 constexpr 数据成员-初始化器,其中每个初始化器子句必须是常量表达式。提供的代码违反了这条规则,因为 bar 的初始化依赖于类体内的 const 表达式 foo(sizeof(int)),使其不是常量表达式。

进一步分析:

进一步的尝试,包括将 constexpr 函数定义移到类体之外,仍然导致 g -4.6.3 中出现错误,突出显示特定于编译器的限制。

结论:

根据 C 标准,不允许在外部使用涉及 constexpr 函数调用的初始化器来初始化静态 constexpr 数据成员。 constexpr 函数或 constexpr 构造函数的定义。这是因为 constexpr 变量必须可用作成员函数体内的编译时常量。

以上是可以使用 C 中的 Constexpr 函数初始化静态 Constexpr 成员吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn