模板类的默认参数,实例化模板

Does default argument of template class, instantiate the template?

本文关键字:实例化 参数 默认      更新时间:2023-10-16
模板

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

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

No.模板在使用时实例化,并基于每个函数进行实例化。

默认参数值只是未指定参数时要使用的类型。但本身并不意味着使用。

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

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

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