2016-05-12 58 views
2

我有以下代码:嵌套初始化列表不构成嵌套数组作为我期望

#include <iostream> 
#include <vector> 
#include <array> 

using namespace std; 

int main() 
{ 
    std::vector<std::array<std::array<double, 3>, 2>> arr = 
    { 
     { 
     {2, 1, 0}, 
     {1, 1, 0} 
     } 
    }; 

    cout << "Array size " << arr.size() << endl; 
} 

我期望这个返回尺寸1的载体,含有该2D阵列看起来像这样:

[ 
    [[2, 1, 0], [1, 1, 0]] 
] 

然而它返回大小两个的矢量,其中两个阵列看起来像这样:

[ 
    [[2, 1, 0], [0, 0, 0]], 
    [[1, 1, 0], [0, 0, 0]] 
] 

在我看来,它应该能够构造两个内部大小的3个数组,然后使用它来构造单个大小的2个数组,将其放入向量中。

我很困惑。任何帮助解释为什么这不像我预期的那样表现会很好。

在Visual Studio在线编译器和Clang中进行了测试。

+0

我也非常不确定如何最好地提出问题,如果有人觉得他们有更多的技术方式来说话,请改变它! – sji

回答

1

std::arrayaggregate type,它没有一个构造函数的initializer-list,所以你需要为每个std::array两个支架:

std::vector<std::array<std::array<double, 3>, 2>> arr = 
{ 
    {{ 
    {{2, 1, 0}}, 
    {{1, 1, 0}} 
    }} 
}; 

您可能使这种警告与以g -Wmissing-braces ++(铛使此警告默认为-Wall)。

+0

您能否详细说明。这种方法很有意义,但我现在无法准确地了解发生了什么事情以产生我得到的结果。看起来像我的原始代码现在应该无法编译给我! – sji

+0

@sji我会尽快更新我的答案并提供详细信息,但我的想法是,在聚合初始化中缺少的字段填充为0. – Holt

+0

花了一点时间阅读我现在了解的链接页面。谢谢 – sji