”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 能否使用 C++ 中的 Constexpr 函数初始化静态 Constexpr 成员?

能否使用 C++ 中的 Constexpr 函数初始化静态 Constexpr 成员?

发布于2024-12-22
浏览:657

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

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

原始问题:

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

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

第一次尝试在类中定义静态 constexpr 函数 foo 并使用 foo 初始化静态 constexpr 成员 bar 失败g -4.5.3 和 g 均存在错误-4.6.3.

解释:

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

进一步分析:

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

结论:

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

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3