我在学习模板时有一个问题
如果模板尚未使用,它们不会实例化代码,因此编译器将不会在obj文件中实现模板,并且链接器也不会在obj文件中找到相应的内容。
< / li>编译花费的时间更长,因为大多数代码是在编译期间生成的。
我认为这两个词不能一起使用,所以我的结论是,链接发生在模板在编译时实例化之前。 你觉得呢?
答案 0 :(得分:0)
1。如果模板尚未使用,则它们不会实例化代码,因此编译器将不会在obj文件中实现该模板,并且链接器也不会在obj文件中找到相应的内容。
模板基本上是在编译时如何生成类的蓝图。因此,编译器可以查看模板并在编译时基于该模板生成一个类。但是,这就是说编译器不会费心地从模板生成特定的类,直到知道您需要使用一个类。
- 由于大多数代码是在编译过程中生成的,因此编译需要更长的时间。
是的。我的意思是它取决于很多事情,但是由于它是在编译时生成的,因此从理论上讲,任何模板都至少会延长编译时间。
我认为这两个措词不能一起使用...
不确定此处似乎矛盾的地方。 2说编译器为创建特定的模板化类做了繁重的工作。 1表示除非有必要,否则它不会打扰。这两个都是正确的。
...所以我的结论是,链接是在编译时实例化模板之前发生的。你觉得呢?
不。不会发生编译总是在链接之前进行。希望我有一个更深入的解释,但就是这样。那不是C ++的工作方式。
为消除混乱,我认为您可能会缺少的是1的意思是如果您不使用模板,则链接器将无法在目标文件中找到它,因为编译器将永远不会首先生成特定的类。