是否缺席
std::array<T,size>::array(const T& value);
疏忽?这对我来说似乎很有用,动态容器(如 std::vector
)确实有类似的构造函数。
我完全清楚
std::array<T,size>::fill(const T& value);
但这不是构造函数,内存将首先清零。如果我想要所有 -1
都像 这个人 怎么办?
原文由 rubenvb 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以为此使用 std::index sequence
:
namespace detail
{
template <typename T, std::size_t...Is>
constexpr std::array<T, sizeof...(Is)>
make_array(const T& value, std::index_sequence<Is...>)
{
return {{(static_cast<void>(Is), value)...}};
}
}
template <std::size_t N, typename T>
constexpr std::array<T, N> make_array(const T& value)
{
return detail::make_array(value, std::make_index_sequence<N>());
}
std::make_index_sequence
是 C++14,但可以在 C++11 中实现。
static_cast<void>(Is)
是处理邪恶 operator,
T
可能提供的。
原文由 Jarod42 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.5k 阅读
3 回答469 阅读✓ 已解决
std::array
在设计上是一个聚合,因此没有用户声明的构造函数。正如您所说,您可以在默认构造后使用
fill
。由于它是一个聚合,默认构造不会将内存归零,但会使其未初始化(如果包含的类型可以轻松初始化)。