具有不同大小的boost :: array的不同实例是否会生成全新的类?

时间:2011-08-11 01:27:18

标签: c++ boost

如果我制作这样的代码:

boost::array<10> a1;
boost::array<20> a2;
boost::array<30> a3;

模板是否会为我生成3个不同的类,并使代码的大小增长?

如果是这样,编译器/链接器是否足够智能,只包含我实际使用的方法定义?例如:如果我使用a1对象的'at'方法,但从不使用a2对象的'at'方法,那么a2的'at'将被完全丢弃。

1 个答案:

答案 0 :(得分:5)

  

模板是否会为我生成3个不同的类

是;具有不同模板参数的模板的每个实例化实际上都是不同的类型。

  

并使代码的大小增长?

极不可能,当然也不比启用内联更差。

  

如果是这样,编译器/链接器是否足够智能,只包含我实际使用的方法定义?

是的,除非您明确地将类型实例化为整体。

  

例如:如果我使用a1对象的'at'方法,但从不使用a2对象的'at'方法,那么a2的'at'将被完全丢弃。

如果您从未使用at的方法a2,并且您没有明确地将boost::array<T, 20>实例化为整体,那么boost::array<T, 20>::at()永远不会被实例化为什么都没有丢弃。