数组初始值设定项必须是初始值设定值列表或字符串文字

array initializer must be an initializer list or string literal

本文关键字:字符串 文字 列表 数组      更新时间:2023-10-16

我应该使用什么类型来编译构造函数中的s参数?我尝试了unsigned char s[32]unsigned char *s,但都给出了编译器错误:

数组初始值设定项必须是初始值设定值列表或字符串文字

struct foo
{
    size_t a;
    size_t b;
    unsigned char c[32];
    constexpr foo(size_t a_, size_t b_, ??? s) : 
        a(a_), 
        b(b_), 
        c(s)
    { 
    }
}

您可以使用的最接近的东西是可变模板:

struct foo
{
    size_t a;
    size_t b;
    unsigned char c[32];
    template<typename ... UnsignedChar>
    constexpr foo(size_t a_, size_t b_, UnsignedChar ... s) : 
        a(a_), 
        b(b_), 
        c{s...} //use curly braces here
    { 
    }
};

然后将其用作:

foo f(10, 20, 1,2,3,4,5, .....,32);
     //a,  b, -------s-----------

请注意,如果为第三个参数s传递的值少于32个,则c的其余元素将使用0进行初始化;如果传递的值超过32个,编译器(我猜)将发出警告(或错误!)。

或者使用std::array<unsigned char, 32>而不是unsigned char[32]