Присвоение вектору char [8] - PullRequest
       17

Присвоение вектору char [8]

1 голос
/ 14 октября 2019

Как можно назначить что-либо для 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 Ответ

5 голосов
/ 14 октября 2019

Вы можете иметь std::vector<char[8]>, поскольку char[8] не удовлетворяет требованиям std::vector для типа значения. В частности, типом значения должен быть Erasable, которому char[8] не присвоен распределитель по умолчанию.

Вместо него можно использовать std::vector<std::array<char,8>>. std::array<char,8> не только стирается, но и назначается.

...