相关疑难解决方法(0)

为什么不能用两层list-initializers初始化2D std :: array?

有人可以帮助我理解为什么我的编译器不能/不推断这个?(使用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)

为什么它处理这种情况但不处理嵌套的情况?

c++ list-initialization stdarray

9
推荐指数
1
解决办法
215
查看次数

std::array 嵌套初始值设定项

为什么这不能编译

#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第一个需要,为什么第二个不需要呢?

c++ c++17

7
推荐指数
1
解决办法
118
查看次数

标签 统计

c++ ×2

c++17 ×1

list-initialization ×1

stdarray ×1