constexpr 中的构建错误

Posted

技术标签:

【中文标题】constexpr 中的构建错误【英文标题】:Building error in constexpr 【发布时间】:2018-07-21 09:02:45 【问题描述】:

我在我的应用程序中使用 constexpr,但出现编译错误。

namespace 
   const int kLength = 1;
   const float kPiNumber = 3.14159265;
   constexpr float kCircumferenceArc()
    return (2*kPiNumber*kLength) / 360; 

我得到的错误是:

在常量表达式中不允许读取非 constexpr 变量“kPiNumber” 返回 (2*kPiNumber) / 360;

有人可以帮我解决这个问题吗?

提前致谢

【问题讨论】:

const 带有constexpr 初始化器的整数变量会自动生成constexpr,但浮点变量不会。解决方案是使kPiNumber constexpr. 【参考方案1】:

constexpr 变量必须从编译时已知的值初始化。一个 const 变量,例如:

const float kPiNumber = 3.14159265;

由于某些历史原因,'const float' 在编译时是未知的。 要使其工作,您必须将此行更改为:

constexpr float kPiNumber = 3.14159265;

完整代码如下:

namespace 
   const int kLength = 1;
   constexpr float kPiNumber = 3.14159265f;
   constexpr float kCircumferenceArc()
    return (2*kPiNumber*kLength) / 360; 

【讨论】:

"由于某些历史原因,'const float' 在编译时是未知的。" 可以使 const 变量具有它们的值,仅在运行时知道. constexpr明确指出,该值必须在编译时已知。 我覆盖了history of why floating point have exception wrt to constant expression

以上是关于constexpr 中的构建错误的主要内容,如果未能解决你的问题,请参考以下文章