聚合初始化,clang 要我破坏我的代码?
Aggregate initialization, clang wants me to break my code?
为什么 clang 建议我在初始化二维标准数组时添加额外的大括号?这会导致错误。还是我只是没有看到他想让我做什么?
我知道我可以添加外括号以表明我正在初始化 class 的第一个成员,但这不会使警告消失。我不认为我可以添加任何其他括号。
在 Godbolt 上编译
clang9.0.0 -O0 -std=c++17 -Wall -Wno-unused-value
#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}
}};
}
为什么 clang 建议我在初始化二维标准数组时添加额外的大括号?这会导致错误。还是我只是没有看到他想让我做什么?
我知道我可以添加外括号以表明我正在初始化 class 的第一个成员,但这不会使警告消失。我不认为我可以添加任何其他括号。
在 Godbolt 上编译
clang9.0.0 -O0 -std=c++17 -Wall -Wno-unused-value
#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}
}};
}