【发布时间】:2019-04-26 19:31:09
【问题描述】:
我被问到正确或错误的问题:
“编译器一遇到函数模板定义就在内存中创建一个函数模板的实例”。
我对模板的理解是编译器在读取函数定义的时候会生成必要的代码。我不确定内存分配。这是真的还是假的?
【问题讨论】:
-
这是一个措辞不当且模棱两可的问题。谁的记忆?编译器的还是程序的?
-
原则上,在您知道模板参数的第一次使用(可能是显式实例化)之前,您不会实例化模板。但是这个问题因谈论记忆而令人困惑。也许它在询问编译器是否需要“记住”模板,它可能会这样做。但是“实例”这个词让我相信这是在询问实例化。在任何情况下,看到一个函数模板定义并不足以生成一个实际的函数。你需要它的模板参数。
-
@RichardHodges 我希望我有更多的信息。这就是我得到的全部。我假设程序的内存,但没有更多的上下文。
-
@FrançoisAndrieux 感谢您的澄清。我倾向于虚假。我相信这个问题的目的是实现编译器只在模板传递参数时生成必要的代码/分配内存,而不是在找到定义时。我很困惑,因为它提到了内存分配,我不知道它是如何在模板中发挥作用的。
标签: c++ templates memory compilation