Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 初始化2D std::数组成员的初始值设定项列表_C++_Arrays_C++11 - Fatal编程技术网

C++ 初始化2D std::数组成员的初始值设定项列表

C++ 初始化2D std::数组成员的初始值设定项列表,c++,arrays,c++11,C++,Arrays,C++11,如何通过初始值设定项列表初始化嵌套(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>

如何通过初始值设定项列表初始化嵌套(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)...}} {}
};

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

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

我使用的是gcc-4.9.0

大括号的规则在嵌套结构中非常复杂

代码中最简单的形式是:

Block<3, 2> b {1, 2, 3, 4, 5, 6};
它支撑所有内部结构

有关详细说明,请参见我的其他答案:


这可能与对标准的解释过于反复无常有关,因为初始化
std::array
所需的大括号数量太多。此完全支持的版本在GCC 4.8.1上编译时没有问题:

Block<3, 2> b {
               {
                { 
                 { {1, 2, 3} }, { {4, 5, 6} } 
                }
               }
              }; 
块b{
{
{ 
{ {1, 2, 3} }, { {4, 5, 6} } 
}
}
}; 
奇怪的是,这个版本也编译:

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

@MM。没问题。这对我来说仍然没有任何意义。无论如何,我认为您的第一次尝试在C++14中应该是合法的。通过将
block
设为私有并提供一个ctor,
block
现在不再是一个集合。由于括号内的初始值设定项从来都不是从中推导出来的,因此对于
Block
类型的对象,唯一有效的初始值设定项现在是
Block b{1,2,3,4,5,6}
将其回滚到对答案有意义的修订版,然后问一个新问题。
Block<3, 2> b {{{ {{1, 2,3}}, {{4,5,6}} }}}; 
Block<3, 2> b {
               {
                { 
                 { {1, 2, 3} }, { {4, 5, 6} } 
                }
               }
              }; 
  Block<3, 2> b { 
                 {{ {1, 2, 3}, {4, 5, 6} } }
                };