让我们假设这小段代码:
#include<iostream>
template <typename T>
class A {
T a;
};
int main() {
A<int> a;
A<char> c;
}
现在,考虑下面的代码,这里有两个独立的int和char类,而不是模板。
#include<iostream>
class A {
int a;
};
class C {
char c;
};
int main() {
A a;
C c;
}
根据编译器,优化程序或代码段,上述两种方法是否会有区别?
哪种方法的可执行文件大小会更大,为什么?
答案 0 :(得分:8)
模板实质上是在编译代码之前用于生成源代码的机制。
从代码生成或可执行文件大小的角度来看,这两种方法是相同的(除了在第一种情况下,两个类都获得成员变量==
module name: __main__
parent process: 2253
process id: 2256
worker arg: 1
==
module name: __main__
parent process: 2253
process id: 2258
worker arg: 3
==
module name: __main__
parent process: 2253
process id: 2257
worker arg: 2
==
module name: __main__
parent process: 2253
process id: 2259
worker arg: 4
,而在第二种情况下,两个类都获得成员变量a
和a
)。
答案 1 :(得分:1)
模板将在编译时根据代码中存在的输入进行解析, 因此,在两种情况下,可执行文件的大小都应该相同,除非存在一些名称差异。
对于您而言,我认为应该保持不变。