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

时间:2019-02-09 23:12:16

标签: c++ language-lawyer

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

  

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

但是,[temp.inst] / 1句1指出:

  

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

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

1 个答案:

答案 0 :(得分:1)

  1. 显式实例化→完成,也成为专长
  2. 专精→完成,所以您获得了专精
  3. 否则

    ·在需要完整类型的上下文中引用专业化
    ·但是专业化尚不明确

    ·然后:

    →编译器将尝试为您实例化它。
    →这样就可以创建您引用的专业化。

定义本身在其上循环。它只是说,如果您在没有明确要求的情况下命名它,那么编译器会聪明地为您做,而不是抱怨。

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


将评论添加到答案中

  • 可以将模板视为带有空白的配方。例如:“ T饼”。
  • 专业化是指填充了某些空白(部分专业化)或所有空白(完全专业化)的食谱
  • 引用专业只是命名。例如,通过大声说出“苹果派”,我指的是我的T派食谱中的苹果特化。
  • 实例化实际上是在做馅饼。

要煮派,我必须放入实际的配料,因此煮苹果派也使“苹果派”的概念存在。

隐式实例化部分意味着您不需要显式地告诉编译器“使用该T饼配方,您可以制作苹果派,梨派,韭菜派……”。当您要苹果派的那一刻,它就知道您的意思并煮了一个派

相关问题