как избежать использования memcpy для создания строки - PullRequest
1 голос
/ 28 февраля 2020

У моего программиста есть много memcpy. Я хочу избежать их.

Я хочу получить структуру наподобие boost :: string_ref. Я хочу знать.

uint32_t len = 20;
char *p = new char[len];
memset(p, 0x00, len)
memcpy(p, "aaaa", 4);
string str(p, 4);// whether is use memcpy or not ?
const string str2(p, 4); //whether is use memcpy or not
//if it used memcpy, how to avoid memcpy ?

string_ref-> string

string_view-> string

string-> string_ref

string-> string_view

char * -> string

string-> string

Скажите, пожалуйста, как определить, использовала ли функция memcpy?

1 Ответ

2 голосов
/ 28 февраля 2020

Используйте std :: string_view , чтобы избежать копирования строки.

#include <string_view>
// ...

const string_view strview(p, 4);

Имейте в виду, что представления строк не обязательно заканчиваются нулем, поэтому будьте осторожны при использовании их в API, которые ожидают нулевое окончание char*. Кроме того, когда строка, которую они просматривают, выходит из области видимости, само представление строки становится недействительным (как указатель).

...