Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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_Specialization - Fatal编程技术网

C++ 专门化的隐式实例化

C++ 专门化的隐式实例化,c++,templates,specialization,C++,Templates,Specialization,我不明白为什么标准首先为模板定义模板实例化,如下N3797::14.7/4[temp.spec]: 实例化一个函数、一个类、一个类的成员的行为 模板或成员模板称为模板 实例化 但更进一步说,它在任何地方都使用了专业化的设置,如下面的N3797::14.7/4[temp.spec]: 实例化的模板专门化可以是隐式的 为给定参数列表实例化(14.7.1)或显式 实例化(14.7.2) 我不明白。模板本身与模板专用化是不同的概念,模板专用化可以是显式专用化或部分专用化。例如N3797::14.5.5/

我不明白为什么标准首先为模板定义模板实例化,如下
N3797::14.7/4[temp.spec]

实例化一个函数、一个类、一个类的成员的行为 模板或成员模板称为模板 实例化

但更进一步说,它在任何地方都使用了专业化的设置,如下面的
N3797::14.7/4[temp.spec]

实例化的模板专门化可以是隐式的 为给定参数列表实例化(14.7.1)或显式 实例化(14.7.2)

我不明白。模板本身与模板专用化是不同的概念,模板专用化可以是
显式专用化
部分专用化
。例如
N3797::14.5.5/1[temp.class.spec]

主模板应在任何专业化之前声明 那个模板

我的问题是,为什么标准首先声明了模板的
安装
概念,但它进一步将该概念应用于模板专门化

此外,
N3797::14.7/4[temp.spec]
将专门化概念定义如下:

专门化是一个类、函数或类成员 实例化或明确专门化(14.7.3)


所以,部分专业化不是专业化,是吗?我完全被这些概念搞糊涂了。你能澄清一下吗?

这是一个类似的问题。 现在,我再次尝试回答这个问题

模板是一种无限的类型,所以我们不能实例化模板,我们只能实例化模板专用化。

  • 隐式实例化,当前编译单元需要使用模板代码,编译器自动实例化模板专用化

  • 显式实例化,我们手动输入代码,使编译器实例化模板专用化

  • 显式专门化,给定所有模板参数,并给出非泛型代码。一旦模板类型匹配,则实例化此专门化
  • 部分专门化,一些参数是给定的模板,并给出非泛型代码。一旦模板类型匹配,则实例化此专门化

谢谢。问题是标准中描述的不太清楚。看看定义就知道了。从形式上讲,模板和它们的专门化是不同的东西,应该区别对待。当然,如果我们假设在
N3797::14.7/4[temp.spec]
中定义的模板安装与模板专门化的实例化完全相同,那么它就可以了。