c – 对静态constexpr的未定义引用

前端之家收集整理的这篇文章主要介绍了c – 对静态constexpr的未定义引用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在这段代码片段中:
template <size_t N>
struct Foo {
   static constexpr std::array<char,N> arr{{0}};
   static const char *data() { return &arr[0]; }
};

template<>
constexpr std::array<char,5> Foo<5>::arr;

int main()
{
   std::cout << Foo<5>::data() << std::endl;
}

与gcc 5.2我得到未定义的引用Foo< 5ul> :: arr,而clang 3.7给出编译时错误

declaration of constexpr static data member ‘arr’ requires an initializer

什么是错误的,应该如何在类声明之外定义静态constexpr?

解决方法

离线定义与其他静态(非整数)成员相同,减去初始化:
template<size_t N>
constexpr std::array<char,N> Foo<N>::arr;

像其他静态成员一样,这在头文件中就像类模板本身一样.

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