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

iva*_*rec 1 c++ boost

如果我做这样的代码:

boost::array<10> a1;
boost::array<20> a2;
boost::array<30> a3;
Run Code Online (Sandbox Code Playgroud)

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

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

ild*_*arn 5

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

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

并使我的代码的大小增长?

极不可能,肯定不比启用内联更差.

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

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

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

如果你从来没有使用的方法ata2,而你没有显式实例boost::array<T, 20>作为一个整体,则boost::array<T, 20>::at()是从来没有实例化开始并没有什么丢弃.

  • @Tomalak:`boost :: array <>`的成员函数非常简单,无论如何都可能被内联; 因此在程序中具有不同的`boost :: array <>`实例化不太可能添加任何显着的大小(如果有的话). (3认同)