我试图创建一个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};
}
当我这样做时,我收到错误消息“太多初始化器”
答案 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}}成员)。