假设我们有一个模板类:
template<typename T>
class X
{
public:
static T t;
static T foo()
{
return t;
}
};
这样的静态成员初始化有什么区别t
double X<double>::t = 5.0f;
以及类专业化(或静态成员!?)的此类初始化?
template<>
double X<double>::t = 5.0f;
假设我们有一个模板类:
template<typename T>
class X
{
public:
static T t;
static T foo()
{
return t;
}
};
这样的静态成员初始化有什么区别t
double X<double>::t = 5.0f;
以及类专业化(或静态成员!?)的此类初始化?
template<>
double X<double>::t = 5.0f;
这两种语法在形式上都是正确的,但第一种在这种情况下不适用。
您可以在模板类本身的定义之外使用四种相对“相似”的语法
所有这些句法结构都统一适用于类方法声明。然而,在这种情况下,我们谈论的是静态数据。
因此,当且仅当它遵循显式类模板特化的定义时,您的第一个声明才是正确
X的T == double但是,如果没有明确的类模板特化,如在您的具体示例中,这样的声明是不合适的。
是的,区别很大,输入
double X<double>::t = 5.0f;无效,会导致编译错误。