gpt4 book ai didi

c++ - 使用 std::array 会导致代码膨胀吗?

转载 作者:IT老高 更新时间:2023-10-28 12:35:59 25 4
gpt4 key购买 nike

我在一些地方看到了在 C++ 中使用 std::array 而不是 C 样式数组的建议,声称它是一种更好、更安全且没有开销的替代方案。见:

The standard container array [...] has no space overheads beyond what it needs to hold its elements, [...]. In other words, it is very much like a built-in array without the problems. (C++11 FAQ)

但是,据我了解,作为一个模板容器, 就程序大小而言,会产生开销,因为它会为每个不同的 N 生成代码,数组实例化。 p>

假设我的程序在不同的地方使用 std::array 并且 N 有几个不同的整数,这会导致代码臃肿吗?可以忽略不计吗?

对于一般的非类型模板参数,我应该担心这个吗?

最佳答案

我不会担心的。如果你看std::array<T, N>的界面,它非常小,并且大多数成员函数(基本上为指针操作提供包装器)都是单行的,任何体面的编译器在 Release模式优化级别上都将被完全优化掉/内联。

此外, you don't pay for what you don't use 因为保证不会实例化类模板的未使用的非虚拟成员函数(std::array<T, N> 没有 virtual 成员函数)。小标准报价:

14.7.1 隐式实例化 [temp.inst]

11 An implementation shall not implicitly instantiate a function template, a variable template, a member template, a non-virtual member function, a member class, or a static data member of a class template that does not require instantiation. [...]

还有一些重载的关系运算符 ==<语义上等同于 std::equalstd::lexicographical_compare .在实践中,这些运算符也应该根据这些算法来实现(如果他们不这样做,请向您的供应商投诉)。

唯一非常小的担心是一点额外的编译时开销,但代码大小和运行时开销应该为零。

相关但不相同:Technical Report on C++ Performance围绕内置类型(intdouble)对瘦类包装器做了很多仔细的基准测试,发现 2006 年编译器技术的开销几乎为零。您可以重复他们的测试来验证 std::array<T,N>T[N]

关于c++ - 使用 std::array<T, N> 会导致代码膨胀吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25009061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com