非数据类型模板参数,更专业化生成?

Who*_*ami 5 c++ instantiation

我的代码是:

#include <iostream>

using namespace std;


template <typename T, int X>

class Test
{
   private:
    T container[X];
   public:
    void printSize();

};
template <typename T, int X>
void Test<T,X>::printSize()
{
    cout <<"Container Size = "<<X <<endl;
}


int main()
{
    cout << "Hello World!" << endl;
    Test<int, 20> t;
    Test<int, 30> t1;

    t.printSize();
    t1.printSize();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

题:

  1. 将产生多少专业化?如果我理解正确,它会产生两个特殊化,一个<int, 20> 用于<int, 30>.如果我的理解错了,请纠正吗?
  2. 有没有办法查看/检查任何逆向工程生成的专业化数量?

Tem*_*Rex 2

1)是的,编译器将生成两个实例化,但链接器可能会将函数与相同的生成代码合并(例如使用整个程序优化),这是减少代码膨胀的一种可爱方法。

2)请参阅这个问题,其中解释了 gcc 如何生成模板实例化输出。