【问题标题】:Explicit instantiation declaration with extern使用 extern 显式实例化声明
【发布时间】:2013-03-11 15:39:07
【问题描述】:

我正在阅读 C++ 标准草案 n3485 中的 14.7.2,它说:

2 显式实例化的语法是: 显式实例化: externopt 模板声明

显式实例化有两种形式:显式实例化定义和显式实例化声明。 显式实例化声明以 extern 关键字开头。

看到模板声明和定义总是放在标题中,我从未见过在模板上使用extern 的声明。那个加粗的句子到底是什么意思?

为什么实例化会关心extern

【问题讨论】:

  • "为什么实例化会关心 extern?" 因为这是用于显式实例化声明的语法。为什么编译器会忽略改变声明含义的有效语法?就像extern int i; 一样,它说“这是一个声明,而不是一个定义,程序中的某个地方会有一个定义”

标签: c++ templates c++11


【解决方案1】:

它告诉编译器不要在这个 TU 中实例化该模板。

请注意,如果您希望代码实际链接,它应该在一个 TU 中实例化(不带 extern 位)。

【讨论】:

    猜你喜欢
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多