如何初始化 std::pair 的 constexpr std::array <int, const char[]>?

问题描述 投票:0回答:2

在 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"}};
c++ arrays c++14 constexpr
2个回答
14
投票

你就快到了。首先,

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"}
不会被错误地视为内部数组对象的初始化程序。


0
投票

C++20 中的另一种选择是使用

std::to_array
,它允许您创建一个不需要预先指定大小的数组。

constexpr auto strings = std::to_array<std::pair<int, const char*>>({
{0, "Int"},
{1, "Float"},
{2, "Bool"},
});
© www.soinside.com 2019 - 2024. All rights reserved.