c – 何时发生隐式模板实例化?

发布时间:2020-01-06 发布网站:大佬教程
大佬教程收集整理的这篇文章主要介绍了c – 何时发生隐式模板实例化?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道在以下情况下何时/何处发生隐式模板实例化.
// temp.h
template <typename T>
struct A {
    T value;
}
// foo.h
#include "temp.h"
void foo();
// foo.cpp
#include "foo.h"
void foo() { A<int> _foo; }
// bar.h
#include "temp.h"
void bar();
// bar.cpp
#include "bar.h"
void bar() { A<int> _bar; }
// main.cpp
#include "foo.h"
#include "bar.h"
int main() { foo(); bar(); return 0; }

我认为它是在调用foo()时发生的,因为它是第一次使用A< int>,所以A< int>在foo.o实施.
并且,当调用bar()时,它链接到A< int>在foo.o.

我对吗?或实例化发生两次?

解决方法

该标准没有说明编译器应如何隐式实例化模板.

我不确定其他编译器,这是g如何处理它,从7.5 Where’s the Template?



> Cfront模型:


这是g如何实现它,重点是我的:

那就是说:用g,每个翻译单元都有自己的实例.该页面再次提到:

您可以选择避免它(当然是第一个也是最后一个选项是明确的):

大佬总结

以上是大佬教程为你收集整理的c – 何时发生隐式模板实例化?全部内容,希望文章能够帮你解决c – 何时发生隐式模板实例化?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ群:277859234,请注明来意。