如何创建一个char数组的std ::数组?

时间:2018-02-09 14:56:34

标签: c++11

我试图创建一个char数组的std ::数组,以便我可以将它声明为静态constexpr。

例如:

#include <array>

int main(){

  static constexpr char A[] = "abc";
  static constexpr char B[] = "def";
  static constexpr std::array<char[], 3> tmp{A, B};
}

当我这样做时,我收到错误消息“太多初始化器”

2 个答案:

答案 0 :(得分:1)

通过编译器的输出,我可以猜测你有一个非标准的扩展活动。严格按照ISO的方式使用char []作为模板的参数是不合法的。有些编译器会将其视为char [0]。

你的阵列意味着存储什么?您尝试这样做的方式会将数组的地址存储到char(并且只有这样做才能在模板参数中用char[]替换const char*std::array是微不足道的静态存储数据的类,因此您不能以这种方式实现具有可变长度字符串的数组。

要么1)取消constexpr并使用std::string 2)使用const char* 3)最坏的情况(有时候是最好的) - 使用固定数组长度或&#34;裸体&#34;具有聚合初始化列表的二维数组。

答案 1 :(得分:0)

您可以使用:

n=5
if (( (n % 2) == 0 )); then
    echo "Something"
    if (( n >= 6 )) && (( n <= 20 )); then
        echo "Some other thing"
    else
        echo "Other else thing"
    fi
else
    echo "Something else"
fi

static constexpr std::array<char[4], 2> tmp {{{ A[0], A[1], A[2], A[3] },
                                              { B[0], B[1], B[2], B[3] }}};

来自http://en.cppreference.com/w/cpp/container/array

  

初始化数组类型的对象时,初始化程序必须是字符串文字(可选地用大括号括起来)或者是为数组成员初始化的大括号括起的列表。

因此,您无法通过另一个数组的对象初始化数组(static constexpr std::array<char[4], 2> tmp { "abc", "def" }; 的{​​{1}}成员)。