初始化成对的 constexpr std::array
Iinitializing a constexpr std::array of pairs
在 C++14 中,如何初始化包含文本字符串的 std::pair
的全局 constexpr std::array
?以下无效:
#include <array>
constexpr std::array<std::pair<int, const char[]>, 3> strings = {
{0, "Int"},
{1, "Float"},
{2, "Bool"}};
int main() {
}
你快到了。首先,char const[]
类型需要改为指针,因为它是一个不完整的类型,可能无法保存在 std::pair
中。其次,您缺少一对牙套。正确的声明如下所示:
constexpr std::array<std::pair<int, const char*>, 3> strings = {{
{0, "Int"},
{1, "Float"},
{2, "Bool"},
}};
额外的大括号是必需的,因为 std::array
是一个包含原始 C 数组的集合,因此我们需要明确提到的大括号,这样 {0, "Int"}
就不会被错误地用作内部的初始化器数组对象。
在 C++14 中,如何初始化包含文本字符串的 std::pair
的全局 constexpr std::array
?以下无效:
#include <array>
constexpr std::array<std::pair<int, const char[]>, 3> strings = {
{0, "Int"},
{1, "Float"},
{2, "Bool"}};
int main() {
}
你快到了。首先,char const[]
类型需要改为指针,因为它是一个不完整的类型,可能无法保存在 std::pair
中。其次,您缺少一对牙套。正确的声明如下所示:
constexpr std::array<std::pair<int, const char*>, 3> strings = {{
{0, "Int"},
{1, "Float"},
{2, "Bool"},
}};
额外的大括号是必需的,因为 std::array
是一个包含原始 C 数组的集合,因此我们需要明确提到的大括号,这样 {0, "Int"}
就不会被错误地用作内部的初始化器数组对象。