【发布时间】:2020-01-30 23:39:15
【问题描述】:
我在 .h 文件中声明了一个静态 constexpr 成员函数。如果我立即在头文件中定义该函数,则一切正常。我一般倾向于在 .cpp 文件中定义函数(即使我希望它们内联,我也会使用 inline 关键字并再次这样做)所以当我尝试这样做时,一开始似乎还可以,但当我尝试时调用这个函数我得到以下错误:
static constexpr uint16_t ClassA::myFoo()' used before its definition
我想了解是否有办法在 .cpp 文件而不是头文件中定义静态 constexpr 成员函数。如果由于我使用的编译器而无法实现或可能受到限制,那么在 .h 文件中定义函数是否有任何副作用? (我知道它对于普通函数是显式内联的,但我不确定对于 constexper 静态函数)。
PS:我在一个小型嵌入式项目中使用 arm-none-eabi-g++ (c++17) 和 Clion。
【问题讨论】:
-
constexpr 旨在用作编译时表达式。在标题中定义很好,也是最合适的地方。至于在cpp中定义它,我可以用我的微软编译器来做,(没有检查在线的)。所以我猜这是你的编译器或其他事情正在发生。