std::array 是不是有 std::memset 等价物?

Posted

技术标签:

【中文标题】std::array 是不是有 std::memset 等价物?【英文标题】:Is there std::memset equivalent for std::array?std::array 是否有 std::memset 等价物? 【发布时间】:2018-12-02 15:11:31 【问题描述】:

std::array 是否有等效的 memset?我认为memset 在将数组初始化为零时应该比在数组上循环时执行得更好。我搜索了一个std::array,但在网上找不到任何东西。

【问题讨论】:

关键是你找不到memset,因为它不适用于任何非POD类型的T。这不仅适用于std::array<T, n>,而且适用于任何基于通用T 类型的容器。 @PaulMcKenzie 虽然可以有条件地启用基于std::is_pod<T>::valuememset 方法……(我应该指出is_pod 计划在C++20 中弃用。) 【参考方案1】:

使用数组的fill() 方法,这就是它的用途。

如果你用0 填充它(例如对于整数),那么编译器可能会优化它(通常是这样,你可以查看生成的代码)。

【讨论】:

如果在没有 std::array 更不用说 std::array::fill 的前现代 C++ 中,您可以使用来自 std::fillstd::fill 和一个好的实现将对不同类型的迭代器和值类型进行专门化,因此它可以非常有效。 (它也适用于std::array。)

以上是关于std::array 是不是有 std::memset 等价物?的主要内容,如果未能解决你的问题,请参考以下文章

通过在堆栈上传递std :: array进行API调用是否有优势

std::array 中的内存是不是连续?

为啥 std::array<int, 10> x 不是零初始化但 std::array<int, 10> x = std::array<int, 10>() 似乎是

为啥 std::array::size constexpr 具有简单类型(int,double,...)而不是 std::vector (GCC)?

std::valarray 和 std::array 有啥区别

为啥我可以从 初始化常规数组,而不是 std::array