Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.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+中实例化单元的含义+;11标准?_C++_Instantiation - Fatal编程技术网

C++ 什么';C+中实例化单元的含义+;11标准?

C++ 什么';C+中实例化单元的含义+;11标准?,c++,instantiation,C++,Instantiation,C++11§2.2翻译阶段,第8阶段。 翻译单元和实例化单元的组合如下。 “实例化单元”的确切含义是什么?实例化单元是模板实例化(隐式和显式) 例如,对于此模板: template < typename T > struct A { }; 模板 结构A { }; 这: template class A<int>; A类模板; 除了上述模板声明和定义之外,是一个例示单元。< P>从C++ 98标准以来,这个意义没有改变,因为这是原始的C++编译模型——实例化单元是单

C++11§2.2翻译阶段,第8阶段。 翻译单元和实例化单元的组合如下。
“实例化单元”的确切含义是什么?

实例化单元是模板实例化(隐式和显式)

例如,对于此模板:

template < typename T >
struct A
{
};
模板
结构A
{
};
这:

template class A<int>;
A类模板;

除了上述模板声明和定义之外,是一个例示单元。

< P>从C++ 98标准以来,这个意义没有改变,因为这是原始的C++编译模型——实例化单元是单独的文件,其中存储在TU中的编译器遇到的模板实例化,因此每个模板实例化在每个程序中只编译一次

要在其
-qtemplateregistry
选项上引用

当编译单元第一次实例化一个新实例时,编译器将创建该实例并将记录保存在注册表文件中。[…]当另一个编译单元引用与前一个编译单元相同的实例化并使用相同的注册表文件时,将不会再次实例化此实例。因此,整个程序只生成一个副本

Oracle有一个C++模板编译模型。


GCC没有自动存储库,但通过使用
-frepo
编译并运行
collect2

,标准在[lex.phases]/1/8中指出,“执行所有必需的实例化以生成实例化单元。[注:这些类似于翻译后的翻译单元,但不包含对未实例化模板的引用,也不包含模板定义。-结束注]“该注释表明实例化单元不是单独的文件,而是带有“已解析”的翻译后的TU”“模板”。@DyP我很难用这种方式解释这个注释,但我同意,这个概念没有得到充分的说明,可能只是作为1998年
导出
模板一厢情愿的一部分放在那里的。