Пока вы инициализируете часть массива, остальные будут инициализироваться по умолчанию.
C[m + 1][n + 1] = {{0}}; // Zero-initialized
C[m + 1][n + 1] = {0}; // Same ^
C[m + 1][n + 1] = {{1}}; // Zero-intialized except for [0][0] = 1
C[m + 1][n + 1] = {1}; // Same ^
C[m + 1][n + 1]; // Uninitialized!
В некоторых случаях массивы инициализируются нулями в любом случае, но это не мешает делатьтак явно.
Обратите внимание, что если вы хотите инициализировать со значениями, отличными от нуля, вам (в основном) не повезет.Недавно я поработал с шаблонным метапрограммированием, которое помогло бы ...
// You can subclass this type, add it as a member, etc.
template<class T, T... I> struct Seq {
typedef T value_type [sizeof...(I)];
// If you want to use it directly from here:
static constexpr value_type value = {I...};
// Don't bother trying with any variation of...
// static constexpr value_type to_array(void) { return {I...}; }
};
template<class T, T... I0, T... I1>
auto operator+(Seq<T, I0...> const&, Seq<T, I1...> const&)
-> Seq<T, I0+I1...> { return {}; }
template<class T, T... I0, T... I1>
auto operator<<(Seq<T, I0...> const&, Seq<T, I1...> const&)
-> Seq<T, I0..., I1...> { return {}; }
// ... more Seq manipulation ...
. Я могу использовать это для определения диапазонов чисел, биномиальных коэффициентов и т. Д., Пока у меня все еще есть доступк аргументам шаблона, я могу сделать массив из этого.(Это включает в себя перемещение Seq<...>
в виде абстрактного T
до функции, в которой оно используется.) Я хотел бы знать, что еще можно сделать с этим.Я попытался вернуть initializer_list
и определить из этого массив, но безуспешно (инициализаторы массива выглядят только как initializer_list
с.)