【发布时间】:2017-01-12 13:40:00
【问题描述】:
为什么我不能像这样淡化 std::array ?
#include <array>
struct Point
{
float x;
float y;
};
int main()
{
std::array<Point, 3> m_points {
{ 1.0f, 1.0f },
{ 2.0f, 2.0f },
{ 3.0f, 3.0f }
};
}
这样做我得到错误:
错误:
std::array<Point, 3ul>的初始化程序太多
但它的工作原理是这样的:
std::array<Point, 3> m_points {
Point{ 1.0f, 1.0f },
Point{ 2.0f, 2.0f },
Point{ 3.0f, 3.0f }
};
相比之下,std::map 可以用以下两种方式初始化:
std::map<int, int> m1 {std::pair<int, int>{1,2}, std::pair<int, int>{3,4}};
std::map<int, int> m2 {{1,2}, {3,4}};
【问题讨论】:
-
大括号数量错误?试试
std::array<Point, 3> m_points {{{ 1.0f, 1.0f }, { 2.0f, 2.0f }, { 3.0f, 3.0f }}};。 Seems to work... -
我认为问题在于编译器不知道您要在第一个示例中初始化什么结构。即使你告诉数组它看不到你想要的类型
Point -
我以前从未在这种情况下听说过
desalinize。我推断它的意思是初始化? -
这种情况下desalinize是什么意思?
-
@Narek,c'tor 类型。
std::arrays 都是隐式声明的。std::map有一个 c'tor 采用std::initializer_list。
标签: c++ initialization aggregate c++14 declaration