Initialization of 2D std::array
Despite its appearance, a 2D std::array in C is not initialized in the same way as a 2D C array. The fundamental reason for this is that a std::array is a class, not an array.
To initialize a 2D std::array, you must use both class braces and member array braces:
std::array<std::array<int, 3>, 2> a2 { { { {1, 2, 3} }, { { 4, 5, 6} } } };
The outer braces {} initialize the class itself, while the inner braces {{}} initialize the member C array contained within the class.
Comparison to C array initialization
To clarify the difference, here's a comparison to C array initialization:
struct B { int array[3]; }; struct A { B array[2]; }; B b = {{1,2,3}}; A a = {{ {{1,2,3}}, {{4,5,6}} }};
In C, the outer braces {} initialize the struct itself, while the inner braces {{}} initialize the member array within the struct. This syntax is analogous to the initialization of a 2D std::array in C , except that in the latter case, the std::array class requires additional outer braces to initialize the class itself.
The above is the detailed content of How Do I Initialize a 2D `std::array` in C ?. For more information, please follow other related articles on the PHP Chinese website!