聚合初始化,clang 要我破坏我的代码?

Aggregate initialization, clang wants me to break my code?

为什么 clang 建议我在初始化二维标准数组时添加额外的大括号?这会导致错误。还是我只是没有看到他想让我做什么?

我知道我可以添加外括号以表明我正在初始化 class 的第一个成员,但这不会使警告消失。我不认为我可以添加任何其他括号。

在 Godbolt 上编译 clang9.0.0 -O0 -std=c++17 -Wall -Wno-unused-value

Link

#include <array>

int main() {
    std::array<std::array<float, 3>, 3> {
        1,2,3,
        1,2,3,
        1,2,3
    };

    std::array<std::array<float, 3>, 3> {{
        1,2,3,
        1,2,3,
        1,2,3
    }};
}

如果警告告诉我在我的示例中执行第二个变体,我会没问题,但似乎他要我包装内部数组成员,而您不能这样做。

有关聚合初始化的一些信息:CppRefference

创建两个相等数组的两个版本:

#include <array>

int main() {
    std::array<std::array<float, 3>, 3> a {{
        {1,2,3},
        {1,2,3},
        {1,2,3}
    }};

    std::array<std::array<float, 3>, 3> b = {{
        {1,2,3},
        {1,2,3},
        {1,2,3}
    }};
}