Pracuję z 2 bibliotekami. Jeden pobiera i zwraca std::string
s, podczas gdy drugi używa std::vector<unsigned char>
s.std :: move między std :: string i std :: vector <unsigned char>
Byłoby dobrze, gdybym mógł ukraść podstawowe tablice z std::string
i std::vector<unsigned char>
i móc przenosić je do siebie bez nadmiernego kopiowania.
ATM używać coś takiego:
const unsigned char* raw_memory =
reinterpret_cast<const unsigned char*>(string_value.c_str()),
std::vector<unsigned char>(raw_memory, raw_memory + string_value.size();
a drugi sposób:
std::string(
reinterpret_cast<const char*>(&vector_value[0]),
vector_value.size());
Byłoby o wiele lepiej, aby móc zdefiniować:
std::string move_into(std::vector<unsigned char>&&);
std::vector<unsigned char> move_into(std::string&&);
C++ 11 jawnie zakazuje kopiowania przy zapisie, prawda? Chyba że trzymają go pod "tak długo, jak zachowuje się tak, jakbyśmy postępowali zgodnie z prawem". Wydaje mi się, że mała optymalizacja ciągów to sposób, aby przejść na chwilę. –