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

时间:2014-04-13 17:20:11

标签: c++ c++11 initialization clang++

我应该使用什么类型来编译构造函数中的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)
    { 
    }

}

1 个答案:

答案 0 :(得分:4)

您可以使用的最接近的是可变参数模板:

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]