分配给char [8]的向量

时间:2019-10-14 16:18:53

标签: c++ arrays vector char

如何为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))起作用?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

您不能拥有std::vector<char[8]>,因为char[8]不满足std::vector对值类型的要求。在特殊情况下,值类型必须是可擦除的,char[8]没有被赋予默认的分配器。

您可以改用std::vector<std::array<char,8>>std::array<char,8>不仅是可擦除的,而且是可分配的。