【发布时间】:2019-09-11 17:55:14
【问题描述】:
我需要一个静态 const 可变长度列表列表(来自 Qt 的 QPointF),我直接在我的代码中初始化(见下文),以后只能以只读方式使用在。
我首先为此使用了const std::vector<QPointF>[],但后来我突然想到我可以改用const std::initializer_list<QPointF>[](const 甚至有必要吗?)。
static const std::initializer_list<QPointF> points[6] = {
{ { 0.50f, 0.50f } },
{ { 0.25f, 0.25f }, { 0.75f, 0.75f } },
{ { 0.25f, 0.25f }, { 0.50f, 0.50f }, { 0.75f, 0.75f } },
{ { 0.25f, 0.25f }, { 0.75f, 0.75f }, { 0.25f, 0.75f }, { 0.75f, 0.25f } },
{ { 0.25f, 0.25f }, { 0.75f, 0.75f }, { 0.50f, 0.50f }, { 0.25f, 0.75f }, { 0.75f, 0.25f } },
{ { 0.25f, 0.25f }, { 0.75f, 0.75f }, { 0.25f, 0.50f }, { 0.75f, 0.50f }, { 0.25f, 0.75f }, { 0.75f, 0.25f } },
};
这是对std::initializer_list 的有效使用吗?对我来说,这看起来像是一个 hack,可能是因为 std::iniatilizer_list 的名称暗示了某种用途。对this 帖子的回答还提到初始化器列表旨在用于初始化例如容器。
我也考虑过const std::array<...>[],但是所有内部列表的长度必须相同。
如果std::initializer_list 在这里不是正确的选择,那么如何正确地做到这一点。由于堆分配,替代 std::vector 感觉不对。
【问题讨论】:
标签: c++ c++11 nested-lists initializer-list compile-time-constant