Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板类的默认参数是否实例化模板?_C++_Templates_Default Arguments_Template Instantiation - Fatal编程技术网

C++ 模板类的默认参数是否实例化模板?

C++ 模板类的默认参数是否实例化模板?,c++,templates,default-arguments,template-instantiation,C++,Templates,Default Arguments,Template Instantiation,模板的以下默认参数是否实例化了类型为EmptyClass的模板 class EmptyClass{}; template <typename TYPE=EmptyClass> class Sample { public: static void test() { TYPE::Serialize(); } }; 类EmptyClass{}; 样板 类样本 { 公众: 静态孔隙试验() { 类型::序列化(); } }; 否,在该代码中创建了E

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

class EmptyClass{};

template <typename TYPE=EmptyClass>
class Sample
{
public:
    static void test()
    {
        TYPE::Serialize();
    }
};
类EmptyClass{};
样板
类样本
{
公众:
静态孔隙试验()
{
类型::序列化();
}
};

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

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

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

调用
Sample::test()
时,将实例化
Sample::test()
,并尝试调用
EmptyClass::serialize()
导致编译时错误(因为
EmptyClass
被声明为没有此函数)


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

只有当你声明了一个实例化的时候。这并没有给我任何编译错误。这意味着,它实际上并没有实例化模板。但是我在C++11标准中找不到任何一行关于实例化的内容。对于模板,在实际使用模板之前,不会实例化任何内容。拥有
静态
成员函数是不同的,因为它们不适用于实例。我怀疑的是。上述代码是否实例化了一个类型为
EmptyClass
的模板?实际上我不确定,但是添加一行
typedef示例不起作用应创建编译器错误。问题不在于构造函数和对象。它是关于模板实例化的。模板的状态不是类的实例,而是类模板的实例。所以我不明白你的回答和这个问题有什么关系。我无法理解为什么这个“答案”被排除在外。。。