【发布时间】:2018-09-08 02:49:17
【问题描述】:
有人能帮我理解为什么我的编译器不能/不能推断出这个吗? (使用 g++ 7.3)
不起作用:
#include <array>
std::array<std::array<double,2>,2> f() {
return {{0,0},{0,0}};
}
工作正常:
#include <array>
std::array<std::array<double,2>,2> f() {
return {std::array<double,2>{0,0},{0,0}};
}
奇怪的是,这也失败了:
#include <array>
std::array<std::array<double,2>,2> f() {
return std::array<std::array<double,2>,2>{{0,0},{0,0}};
}
@1201ProgramAlarm 指出添加另一组花括号有效:
#include <array>
std::array<std::array<double,2>,2> f() {
return {{{0,0},{0,0}}};
}
它使用聚合初始化,因为std::array 没有用于大括号初始化列表的构造函数。这很好,但是为什么/如何工作呢?
std::array<double,2> x{1,2};
为什么它处理这种情况而不是嵌套情况?
【问题讨论】:
-
尺寸怎么样?您尚未定义外部数组的大小。这可能会导致问题。
-
你需要another set的花括号。
-
对了,为什么不用
typedef double mat[2][2];?
标签: c++ stdarray list-initialization