- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有以下代码:
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 之前,在进行直接初始化时需要额外的大括号级别。但是,根据 this page,拷贝初始化不应该要求这样做。 (看看那里的例子)。
谁能解释一下?
This SO question这被认为是我的问题的重复确实确实回答了一些具体和有用的问题(与我自己有关)但是由于使用 pair
(我认为这是导致最初发布)。我一开始就不会发现这个 SO 问题,所以如果有的话,我认为也许我表达问题的方式可能会帮助人们从不同的角度找到解决方案。
最佳答案
std::array
被定义为包含数组的结构。
因此第一对大括号用于初始化数组结构的数据成员。第二对大括号用于初始化结构中的数组。第三对大括号用于初始化每个 std::pair 类型的对象。
根据 C++ 标准(23.3.2.1 类模板数组概述)更精确
2 An array is an aggregate (8.5.1) that can be initialized with the syntax
array<T, N> a = { initializer-list };
where initializer-list is a comma-separated list of up to N elements whose types are convertible to T.
关于c++ - std::array 聚合初始化需要大量令人困惑的花括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29150369/
很抱歉新手的问题,但是: 我最近才发现“=”运算符不只是处理对象/等等。值(value),也是引用。这很酷,但我认为这对变量来说是不一样的,它不会在存储整数或 float 的变量之间创建引用。后来我觉
我是一名优秀的程序员,十分优秀!