有人可以帮助我理解为什么我的编译器不能/不推断这个?(使用g ++ 7.3)
不起作用:
#include <array>
std::array<std::array<double,2>,2> f() {
return {{0,0},{0,0}};
}
Run Code Online (Sandbox Code Playgroud)
工作良好:
#include <array>
std::array<std::array<double,2>,2> f() {
return {std::array<double,2>{0,0},{0,0}};
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这也失败了:
#include <array>
std::array<std::array<double,2>,2> f() {
return std::array<std::array<double,2>,2>{{0,0},{0,0}};
}
Run Code Online (Sandbox Code Playgroud)
@ 1201ProgramAlarm指出添加另一组花括号有效:
#include <array>
std::array<std::array<double,2>,2> f() {
return {{{0,0},{0,0}}};
}
Run Code Online (Sandbox Code Playgroud)
它使用聚合初始化,因为std::array没有用于brace-init-list的构造函数.那没关系,但那么为什么/如何运作?
std::array<double,2> x{1,2};
Run Code Online (Sandbox Code Playgroud)
为什么它处理这种情况但不处理嵌套的情况?
为什么这不能编译
#include <vector>
#include <array>
std::array<std::vector<const char*>, 2> s = {
{"abc", "def"},
{"ghi"}
};
Run Code Online (Sandbox Code Playgroud)
但这确实
#include <vector>
#include <array>
std::array<std::vector<const char*>, 2> s = {
std::vector{"abc", "def"},
{"ghi"}
};
Run Code Online (Sandbox Code Playgroud)
如果出于某种原因std::vector第一个需要,为什么第二个不需要呢?