【发布时间】:2019-08-27 14:43:19
【问题描述】:
据我了解,C++ 模板通过为所需的每种类型编译单独的类或函数来工作。对于只会为少数不同类型/参数调用的类或函数,这似乎是合乎逻辑的,但对于std::array,这似乎会导致同一个类被编译成数百个不同的版本。
我了解std::array 相对于 C 样式数组的优势,但如果我的上述假设是正确的,与后者相比,使用前者似乎会导致巨大的二进制大小。
例如,如果说在一个大型程序中,我们最终在整个代码中使用了 99 个不同大小的数组,因此我们实际上拥有:
int arr[1] = { ... }
int arr[2] = { ... }
int arr[...] = { ... }
int arr[99] = { ... }
int arr[100] = { ... }
或者
std::array<int, 1> arr = { ... }
std::array<int, 2> arr = { ... }
std::array<int, ...> arr = { ... }
std::array<int, 99> arr = { ... }
std::array<int, 100> arr = { ... }
std::array 示例最终会导致整个类及其所有函数被编译成二进制 99 次吗?
【问题讨论】:
-
“会导致巨大的二进制文件大小”——试试吧。
-
相信你的编译器优化器 ;-)
标签: c++ templates instantiation template-specialization