C++ 模板的静态成员变量是定义的还是专用的?
这涉及以下问题: 在下面的spinet中,最后一行是专门化、定义还是两者兼而有之C++ 模板的静态成员变量是定义的还是专用的?,c++,language-lawyer,C++,Language Lawyer,这涉及以下问题: 在下面的spinet中,最后一行是专门化、定义还是两者兼而有之 template<typename T> struct A { static const T s; }; template<typename T> const T A<T>::s = T(1); 模板 结构A{ 静态常数; }; 模板 常数ta::s=T(1); 对我来说,这似乎是一个定义,但gcc成功编译的问题让我质疑我的假设。这是定义 以下将是一个专门化 templ
template<typename T>
struct A {
static const T s;
};
template<typename T>
const T A<T>::s = T(1);
模板
结构A{
静态常数;
};
模板
常数ta::s=T(1);
对我来说,这似乎是一个定义,但gcc成功编译的问题让我质疑我的假设。这是定义
以下将是一个专门化
template <>
const int A<int>::s = 20;
查看它的定义
以下将是一个专门化
template <>
const int A<int>::s = 20;
我不是语言律师,但我想说最后一行是定义。为什么?因为我将模板专门化与指定类型的模板相关联,而在这里,情况并非如此。我猜最后一行只会将1传递给
T
类型的构造函数。我不是语言律师,但我想最后一行是定义。为什么?因为我将模板专门化与指定类型的模板相关联,而在这里,情况并非如此。我猜最后一行只会将1传递给T
类型的构造函数。很高兴看到我没有发疯。谢谢。@Frank,不客气。很高兴我能帮助你保持清醒:)很高兴看到我没有发疯。谢谢。@Frank,不客气。很高兴我能帮助你保持清醒:)