gpt4 book ai didi

c++ - 用于初始化 2D std::array 成员的初始化列表

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:31 28 4
gpt4 key购买 nike

如何通过初始化列表初始化嵌套的 (2D) std::array

template <std::size_t W, std::size_t H>
class Block
{
std::array<std::array<int, W>, H> block;
public:

template <typename ...E>
Block(E&&...e) : block {{std::forward<E>(e)...}} {}
};

Block 应该能够初始化 block 成员,如下所示:

Block<3, 2> b {{ {1, 2, 3}, {4, 5, 6} }};

注意:我们可以在 C++11 中直接初始化 std::array:

std::array<std::array<int, 3>, 2> b {{ {1, 2, 3}, {4, 5, 6} }};

我正在使用 gcc-4.9.0

最佳答案

当涉及到嵌套结构时,大括号的规则非常复杂。

代码中最简单的形式是这样的:

Block<3, 2> b {1, 2, 3, 4, 5, 6};

这基本上省略了所有内括号——语言允许这些省略。

下一个稍微复杂的语法是这样的:

Block<3, 2> b {{1, 2, 3, 4, 5, 6}};

它仍然省略大括号,但就 Block 而言,就其成员而言,它是完全大括号的。它省略了 array 及其成员的大括号。

这一个是完全支撑的:

Block<3, 2> b {{{ {{1, 2,3}}, {{4,5,6}} }}}; 

它支撑所有内部结构。

All forms compiles fine .

详细解释见我的另一个回答:

关于c++ - 用于初始化 2D std::array 成员的初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19756652/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com