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

c – 对静态constexpr的未定义引用,第1张

概述在这段代码片段中: 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; 在这段代码片段中:
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 – 对静态constexpr的未定义引用全部内容,希望文章能够帮你解决c – 对静态constexpr的未定义引用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1249403.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存