如何使用初始化器列表
Posted
技术标签:
【中文标题】如何使用初始化器列表【英文标题】:How to use initializer_list 【发布时间】:2013-05-06 20:32:16 【问题描述】:我有:
1) NetBeans 7.3 2) Digia v4.8.4 的 Qt。 3) MinGW 编译器。
你能帮我初始化我的数组吗? 我失败了,很遗憾。我知道我必须使用 initializer_list。 但是在我的文件中包含什么以及如何组织所有内容对我来说是个谜。
你能帮帮我吗?
图.h
#include <initializer_list>
class Figure: public QObject
Q_OBJECT
private:
int shape[4][4][4];
Figure.cpp
Figure:: Figure()
std::initializer_list<int> init;
auto init = std::initializer_list<int>
(
0, 0, 0, 0,
0, 1, 1, 0,
0, 0, 1, 0,
0, 0, 0, 0
,
0, 0, 0, 0,
0, 0, 1, 0,
0, 1, 1, 0,
0, 0, 0, 0
,
0, 0, 0, 0,
0, 1, 0, 0,
0, 1, 1, 0,
0, 0, 0, 0
,
0, 0, 0, 0,
0, 1, 1, 0,
0, 1, 0, 0,
0, 0, 0, 0
);
【问题讨论】:
【参考方案1】:...
private:
int shape[4][4][4]
0, 0, 0, 0,
0, 1, 1, 0,
0, 0, 1, 0,
0, 0, 0, 0
,
0, 0, 0, 0,
0, 0, 1, 0,
0, 1, 1, 0,
0, 0, 0, 0
,
0, 0, 0, 0,
0, 1, 0, 0,
0, 1, 1, 0,
0, 0, 0, 0
,
0, 0, 0, 0,
0, 1, 1, 0,
0, 1, 0, 0,
0, 0, 0, 0
;
...
在您的特定情况下,您甚至不需要显式使用initalizer_list
,因为可以在定义位置初始化静态数组,这是通过上面示例中的语法完成的(需要符合 C++11 )。
也可以在构造函数初始化列表中初始化shape
:
...
Figure::Figure(): shape
0, 0, 0, 0,
0, 1, 1, 0,
0, 0, 1, 0,
0, 0, 0, 0
,
0, 0, 0, 0,
0, 0, 1, 0,
0, 1, 1, 0,
0, 0, 0, 0
,
0, 0, 0, 0,
0, 1, 0, 0,
0, 1, 1, 0,
0, 0, 0, 0
,
0, 0, 0, 0,
0, 1, 1, 0,
0, 1, 0, 0,
0, 0, 0, 0
...
...
注意:请注意您在尝试中遗漏了额外的括号。
【讨论】:
【参考方案2】:您不需要创建initializer_list
,尤其是因为您会尝试将其分配到您的数组,而不是从中初始化您的数组- 那将是非法的。相反,您可以直接在构造函数的初始化列表中初始化您的数组,如下所示:
Figure::Figure()
: shape
0, 0, 0, 0,
0, 1, 1, 0,
0, 0, 1, 0,
0, 0, 0, 0
,
0, 0, 0, 0,
0, 0, 1, 0,
0, 1, 1, 0,
0, 0, 0, 0
,
0, 0, 0, 0,
0, 1, 0, 0,
0, 1, 1, 0,
0, 0, 0, 0
,
0, 0, 0, 0,
0, 1, 1, 0,
0, 1, 0, 0,
0, 0, 0, 0
// Body of the constructor...
;
请注意,在 C++11 中,您还可以为数组提供内联初始化程序,如下所示:
class Figure: public QObject
Figure();
private:
int shape[4][4][4]
0, 0, 0, 0,
0, 1, 1, 0,
0, 0, 1, 0,
0, 0, 0, 0
,
0, 0, 0, 0,
0, 0, 1, 0,
0, 1, 1, 0,
0, 0, 0, 0
,
0, 0, 0, 0,
0, 1, 0, 0,
0, 1, 1, 0,
0, 0, 0, 0
,
0, 0, 0, 0,
0, 1, 1, 0,
0, 1, 0, 0,
0, 0, 0, 0
;
;
Figure::Figure()
// Body of the constructor...
【讨论】:
以上是关于如何使用初始化器列表的主要内容,如果未能解决你的问题,请参考以下文章
如何在构造函数中使用删除器初始化 std::unique_ptr?
windows phone 8 长列表选择器。如何在长列表选择器中添加新项目。目前我正在使用 ItemRealized 事件
如何使用图像创建 JavaScript/HTML5 微调器列表?