初始化constexpr std ::数组对

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初始化constexpr std ::数组对相关的知识,希望对你有一定的参考价值。

在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() {
}
答案

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

以上是关于初始化constexpr std ::数组对的主要内容,如果未能解决你的问题,请参考以下文章

通过 constexpr 初始化数组

未定义的对静态constexpr char []的引用

std::max() 和 std::min() 不是 constexpr

constexpr 函数内的 std::experimental::optional

对静态 constexpr 数据成员的未定义引用错误

如何将constexpr作为函数参数传递c ++ [重复]