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>::value
的memset
方法……(我应该指出is_pod
计划在C++20 中弃用。)
【参考方案1】:
使用数组的fill()
方法,这就是它的用途。
如果你用0
填充它(例如对于整数),那么编译器可能会优化它(通常是这样,你可以查看生成的代码)。
【讨论】:
如果在没有std::array
更不用说 std::array::fill
的前现代 C++ 中,您可以使用来自 std::fill
的 std::fill
和一个好的实现将对不同类型的迭代器和值类型进行专门化,因此它可以非常有效。 (它也适用于std::array
。)以上是关于std::array 是不是有 std::memset 等价物?的主要内容,如果未能解决你的问题,请参考以下文章
通过在堆栈上传递std :: array进行API调用是否有优势
为啥 std::array<int, 10> x 不是零初始化但 std::array<int, 10> x = std::array<int, 10>() 似乎是
为啥 std::array::size constexpr 具有简单类型(int,double,...)而不是 std::vector (GCC)?