c – 如果count()是constexpr函数,为什么std :: array不能编译?

前端之家收集整理的这篇文章主要介绍了c – 如果count()是constexpr函数,为什么std :: array不能编译?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > constexpr not working if the function is declared inside class scope3个
为什么以下C代码无法用VC2017编译?
struct FixedMatchResults
{
    static constexpr std::size_t count() { return 20; };

    std::array<int,count()> results;
};

错误是:

error C2975: ‘_Size’: invalid template argument for ‘std::array’,
expected compile-time constant expression

解决方法

在完整的结构定义之后解析函数体.这是为了允许您可能引用在函数体之后定义的其他成员.

但是,这意味着当编译器解析结果时,它没有count函数的主体,因此无法运行它.

有关更详细的答案,请参阅此问题:constexpr not working if the function is declared inside class scope

猜你在找的C&C++相关文章