实例化和专业化的定义是相互依赖的

Definition of instantiation and specialization are both dependant on each other

本文关键字:依赖 定义 专业化 实例化      更新时间:2023-10-16

在标准中,[temp.spec]/4句子2表示:

专门化是实例化或显式专门化的类、函数或类成员。

然而,[temp.inst]/1句子1表示:

除非类模板专门化已显式实例化或显式专门化,否则当在需要完全定义的对象类型的上下文中引用专门化时,或者当类类型的完整性影响程序的语义时,类模板专门性将隐式实例化。

因此,专门化是实例化的类/函数/成员,但在引用专门化之前不会实例化?有人请向我解释一下。

  1. 显式实例化→完成,也成为一种专业
  2. 明确专门化→完成了,所以你得到了专业化
  3. 否则

    ·特殊化是在需要完整类型的上下文中引用的
    ·,但特殊化还不知道

    .则:

    →编译器将尝试为您实例化它
    →这样做的效果是创建您引用的专业化。

定义在其自身上循环。它只是说,若你们在并没有明确要求的情况下命名它,编译器会很聪明地为你们命名,而不是抱怨。

基本上,这是一条允许我们使用模板的规则,而不必为我们将要使用的所有类型显式实例化。


将评论烘焙成答案:

  • 模板可以被认为是一个有空格的配方。例如:"T派">
  • 专业化是指填充了一些空格(部分专业化)或所有空格(完全专业化)的配方
  • 引用一个专业化就是命名它。例如,大声说出"苹果派",我指的是我的T派食谱中的苹果专业化
  • 实例化实际上就是在做馅饼

要烹饪馅饼,我必须放入实际的配料,所以烹饪苹果派也使"苹果派"的概念存在。

隐式实例化部分意味着你不需要明确地告诉编译器"有了t派食谱,你可以做苹果派、梨派、韭菜派……"。当你向它要苹果派的那一刻,它就知道你的意思,并做了一个派<苹果>。