Does the following default argument for the template instantiates a template with type EmptyClass
?
class EmptyClass{};
template <typename TYPE=EmptyClass>
class Sample
{
public:
static void test()
{
TYPE::Serialize();
}
};
Does the following default argument for the template instantiates a template with type EmptyClass
?
class EmptyClass{};
template <typename TYPE=EmptyClass>
class Sample
{
public:
static void test()
{
TYPE::Serialize();
}
};
不会。模板在使用时被实例化,并且在每个函数的基础上被实例化。
默认参数值只是未指定参数时使用的类型。但它们本身并不意味着使用。
当您调用Sample<>::test()
thenSample<Emptyclass>::test()
被实例化并EmptyClass::serialize()
尝试调用时,导致编译时错误(因为Emptyclass
被声明为没有这样的功能)
尝试编写更多函数,包含引用不同参数的不同编译时错误,您将看到如何在不使用该函数之前不产生错误。
不,在该代码中创建了 EmptyClass 的任何实例。序列化是一个静态函数。并且 EmptyClass 的构造函数永远不会被调用(在显示的代码中)