如何为std::vector<char[8]>
分配内容?
#include <vector>
void test(void)
{
std::vector<char[8]> x; // works
x.push_back("7777777");
//
// error: array 'new' cannot have initialization arguments
// error: object expression of non-scalar type 'char [8]'
// cannot be used in a pseudo-destructor expression
char a[8] = "7777777";
x.push_back(a);
//
// error: array 'new' cannot have initialization arguments
// error: object expression of non-scalar type 'char [8]'
// cannot be used in a pseudo-destructor expression
char b[2][8] = {"7777777", "8888888"};
x.assign(b, b+2);
//
// error: static_assert failed "type is not assignable"
// error: array 'new' cannot have initialization arguments
}// end of function
似乎可以创建一个std::vector<char[8]>
,但无法为其分配任何内容。如何至少使最后一行(即x.assign(b, b+2)
)起作用?
非常感谢您的帮助!
答案 0 :(得分:5)
您不能拥有std::vector<char[8]>
,因为char[8]
不满足std::vector
对值类型的要求。在特殊情况下,值类型必须是可擦除的,char[8]
没有被赋予默认的分配器。
您可以改用std::vector<std::array<char,8>>
。 std::array<char,8>
不仅是可擦除的,而且是可分配的。