在构造函数中初始化const数组
initializing a const array in the constructor
我正在尝试实现类似的东西
struct A {
A(const int (&arr)[5])
: arr_(arr)
{}
const int arr_[5];
}
显然这不起作用。我的目的是保持arr_
字段不变。实现此目的的最佳方法是什么(可以是C 11)?
使用 std::array
:
struct A {
A(std::array<int, 5> const& arr)
: arr_(arr)
{}
std::array<int, 5> const arr_;
}
带有转发构造函数:
struct A {
A(const int (&arr)[5]) : A(arr, std::make_index_sequence<5>()) {}
const int arr_[5];
private:
template <std::size_t ... Is>
A(const int (&arr)[5], std::index_sequence<Is...>)
: arr_{arr[Is]...}
{}
};
您可以内部使用std ::数组并转换一个数组:
#include <array>
#include <utility>
template <typename T, std::size_t ... I>
constexpr std::array<T, sizeof...(I)>
make_sequence(std::integer_sequence<std::size_t, I...>, const T (&array)[sizeof...(I)]) {
return { array[I] ... };
}
template <typename T, std::size_t N>
constexpr std::array<T, N>
make_sequence(const T (&array)[N]) {
return make_sequence(std::make_index_sequence<N>(), array);
}
// Test
#include <cassert>
struct A {
constexpr A(const int (&arr)[5])
: arr_(make_sequence(arr))
{}
const std::array<int, 5> arr_;
};
int main()
{
int array[5] = { 0, 1, 2, 3, 4 };
A a(array);
assert(a.arr_[2] == 2);
return 0;
}
但是,如果您可以自由修改A类的界面,请使用@ecatmur的答案。
相关文章:
- 使用对const结构的const数组的引用进行构造
- 初始化类中的静态 const 数组 - C++
- 如何定义在编译时数据未知的 const 数组
- 如何使用函数的输出初始化 const 数组结构字段?
- 是否允许使用初始值设定项列表将const数组引用实例化为构造函数参数
- const 数组,用于在数组长度定义中使用其元素或为模板参数提供值
- 如何访问一系列const变量作为const数组
- 如果在执行过程中替换二进制文件,"const"数组是否驻留在内存中?
- 在源文件中定义 const 数组
- 具有成员变量的对象 Const 数组 = 先前索引成员变量的总和
- 在构造函数中初始化const数组
- 在编译时使用基于模板的长度初始化 const 数组
- 传递const数组时的C 误差区分专业
- c++中const数组的平均值模板
- 如何在类中存储const数组
- 为什么 const 数组优先绑定到 const T& 参数而不是 T&& 参数?
- 如何将静态 const 数组声明和初始化为类成员
- 从 constexpr 构造 const 数组
- 静态 const 数组在 MSVC 中动态初始化
- 使用 const 数组元素初始化