初始化 std::数组与隐含长度
Initialize std::array with implied length
在C中你可以做int a[] = {1,2,3,4,5}
,但是C++11 std::array<int> a = {1,2,3,4,5}
会给出"模板参数太少"的编译错误。有什么办法吗?
你能拥有的最好的是 make_array
,像这样:
template<typename T, typename...Ts>
constexpr std::array<T, 1 + sizeof...(Ts)> make_array(T&& head, Ts&&...tail)
{
return {{ std::forward<T>(head), std::forward<Ts>(tail)... }};
}
std::array 的实现:
template<typename T, std::size_t N>
struct array {
T array_impl[N];
};
所以这应该有效:
std::array<std::int, 5> a = {{ 1, 2, 3, 4, 5 }};
这基本上就像(因为编译器同意删除内部大括号。
std::array<std::int, 5> a = { 1, 2, 3, 4, 5 };
看
相关文章:
- 初始化具有非默认构造函数的std::数组项的更好方法
- 输入std::数组时出现问题
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- C++如何生成std::数组列表
- 捕获lambda中的std::数组
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- std::数组边界检查如何工作?
- 通过unique_ptr访问std::数组
- 初始化 std::数组 of Eigen::Map
- 传递 std::数组变量作为参数
- 在带有模板的函数中传递未知大小的 std::数组.如何更正此代码?
- 如何将 std::find() 与 2d std: 数组一起使用?
- std::数组派生类聚合初始化
- 在std::数组内部使用时,无法从std::函数构造类
- 使用从1到N的数字初始化std数组模板参数
- 正在声明多维std::数组
- 使用std::index_sequence对std::数组初始化进行包扩展
- 使用 std::type T 的数组来构造可从 T 构造的 std::数组
- 从 std::数组创建十六进制代表
- 使用默认值初始化 std::数组