模板的默认参数class,是否实例化模板?

Does default argument of template class, instantiate the template?

模板的以下默认参数是否实例化了类型为 EmptyClass 的模板?

class EmptyClass{};

template <typename TYPE=EmptyClass>
class Sample
{
public:
    static void test()
    {
        TYPE::Serialize();
    }
};

不,在该代码中创建了 EmptyClass 的任何实例。序列化是一个静态函数。并且 EmptyClass 的构造函数从未被调用(在代码中显示)

没有。模板在使用时实例化,并在每个函数的基础上实例化。

默认参数值只是在未指定参数时使用的类型。但本身并不暗示用法。

当您调用 Sample<>::test() 时,Sample<Emptyclass>::test() 被实例化并尝试调用 EmptyClass::serialize(),导致编译时错误(因为 Emptyclass 被声明为没有这样的函数)

尝试编写更多函数,包含引用不同参数的不同编译时错误,您将看到如何在不使用该函数之前不产生错误。