模板和两个单独的类之间的区别

时间:2019-02-18 11:22:23

标签: c++

让我们假设这小段代码:

#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;
}

根据编译器,优化程序或代码段,上述两种方法是否会有区别?

哪种方法的可执行文件大小会更大,为什么?

2 个答案:

答案 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 ,而在第二种情况下,两个类都获得成员变量aa )。

比较variant 1variant 2。注意生成的代码相同。

答案 1 :(得分:1)

模板将在编译时根据代码中存在的输入进行解析, 因此,在两种情况下,可执行文件的大小都应该相同,除非存在一些名称差异。

对于您而言,我认为应该保持不变。