初始化一个constexpr std :: arrays对

时间:2019-03-11 10:32:41

标签: c++ arrays c++14 constexpr

在C ++ 14中,如何初始化包含文本字符串的std::array的全局constexpr std::pair?以下内容无效:

#include <array>

constexpr std::array<std::pair<int, const char[]>, 3> strings = {
  {0, "Int"},
  {1, "Float"},
  {2, "Bool"}};

int main() {
}

1 个答案:

答案 0 :(得分:11)

您快到了。首先,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"}被错误地视为内部数组对象的初始化程序