【发布时间】:2014-09-20 10:56:59
【问题描述】:
我在一些地方看到了在 C++ 中使用 std::array 而不是 C 样式数组的建议,声称它是一种更好、更安全且没有开销的替代方案。见:
标准容器数组 [...] 没有超出 它需要保持其元素,[...]。换句话说,它非常 就像一个没有问题的内置数组。 (C++11 FAQ)
然而,据我了解,作为一个模板容器将就程序大小而言是一种开销,因为它会为每个不同的 N 生成代码,数组实例化。 p>
假设我的程序在不同的地方使用std::array,N 有几个不同的整数,这会导致代码臃肿吗?可以忽略不计吗?
对于一般的非类型模板参数,我应该担心这个吗?
【问题讨论】:
-
std::array中没有太多代码应该全部内联。我看不出它是如何增加可执行文件大小的。 -
您能否发布一些代码,当您使用
std::array时会产生更大的可执行文件? -
"It" 不会生成 anything 除了您请求的存储空间,除非您还请求使用它提供的算法/成员。这有点重要; it 提供它们,因此您不必这样做。您当然可以将它用作平面阵列(无论如何它就是这样),尽管我很想知道为什么您会选择重新组装它已经提供给您的所有轮子。随着基于模板的产品的发展,你不使用的东西不会膨胀,所以我迫不及待地想看看 down 端在哪里。
-
测量,测量,测量。
标签: c++ templates c++11 overhead stdarray