c – 对静态constexpr的未定义引用
发布时间:2020-12-16 05:43:07 所属栏目:百科 来源:网络整理
导读:在这段代码片段中: template size_t Nstruct Foo { static constexpr std::arraychar,N arr{{0}}; static const char *data() { return arr[0]; }};templateconstexpr std::arraychar,5 Foo5::arr;int main(){ std::cout Foo5::data() std::endl;} 与gcc 5.
在这段代码片段中:
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给出编译时错误:
什么是错误的,应该如何在类声明之外定义静态constexpr? 解决方法
离线定义与其他静态(非整数)成员相同,减去初始化:
template<size_t N> constexpr std::array<char,N> Foo<N>::arr; 像其他静态成员一样,这在头文件中就像类模板本身一样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |