I have the following code:
enum class MessageDeliveryMethod
{
POST_MASTER,
BUBBLE,
NUM_ENUMERATORS
};
namespace
{
using MapType = std::array<
std::pair<char const*, MessageDeliveryMethod>,
static_cast<std::size_t>(MessageDeliveryMethod::NUM_ENUMERATORS)
>;
MapType g_mapping = {{
{"POST_MASTER", MessageDeliveryMethod::POST_MASTER},
{"BUBBLE", MessageDeliveryMethod::BUBBLE},
}};
}
这段代码可以编译通过,但我不知道为什么。变量
g_mapping
需要多出一层看似冗余的花括号。换句话说,我预期初始化应该像这样:MapType g_mapping = {
{"POST_MASTER", MessageDeliveryMethod::POST_MASTER},
{"BUBBLE", MessageDeliveryMethod::BUBBLE},
};
(移除一层外部括号)。
据我了解,在 C++14 之前,进行直接初始化需要额外的一层括号。然而,根据这个页面(看那里的例子),不应要求进行复制初始化。
有人能够解释一下吗?
更新:
这个 SO 问题 被认为与我的问题重复,确实回答了一些特定和有用的问题(与我的问题相关),但在上下文之外,我的问题由于使用了 pair
(最初我以为是导致问题的原因)而变得令人困惑。我永远不会首先找到那个 SO 问题,所以如果有什么值得的话,我认为我提出问题的方式可能会帮助人们从不同的角度得出解决方案。