如果我做这样的代码:
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'将被完全丢弃.
模板是否会为我生成3个不同的类
是; 具有不同模板参数的模板的每个实例化实际上都是不同的类型.
并使我的代码的大小增长?
极不可能,肯定不比启用内联更差.
如果是这样,编译器/链接器是否足够智能,只包含我实际使用的方法定义?
是的,除非您明确地将类型实例化为整体.
例如:如果我使用a1对象的'at'方法,但从不使用a2对象的'at'方法,那么a2的'at'将被完全丢弃.
如果你从来没有使用的方法at的a2,而你没有显式实例boost::array<T, 20>作为一个整体,则boost::array<T, 20>::at()是从来没有实例化开始并没有什么丢弃.
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |