Безопасно ли преобразовывать параметр функции `const char *` в `std :: string_view`? - PullRequest
3 голосов
/ 13 февраля 2020

В заголовке почти все сказано.

void f(const char*)

до

void f(std::string_view)

Это безопасно? если нет, то какие подводные камни? Семантика

std::string_view диктует, что массив не обязательно завершается нулем, что может быть реальной проблемой внутри f, поскольку это было принято во внимание (например, если необработанный указатель передается функции, ожидающей нулевое завершение внутри f).

Ответы [ 2 ]

5 голосов
/ 13 февраля 2020

Это безопасно?

Да, это безопасно, насколько это правильно. Если кто-то дает вам мусор, у вас все равно останется мусор.

Какие подводные камни?

Как вы сказали, std::string_view не обязательно должен быть завершен нулем. Если вам понадобится строка c с нулевым символом в конце где-то дальше по цепочке вызовов, вы не сможете использовать ее, потому что не можете гарантировать, что она у вас есть.

1 голос
/ 13 февраля 2020

Безопасно ли?

Не в общем.

если нет, то какие подводные камни?

Это:

std :: string_view семантика диктует, что массив не обязательно завершено null, что может быть реальной проблемой внутри f, поскольку это было принято во внимание (например, если необработанный указатель передается функции, ожидающей нулевое завершение внутри f).

Пока реализация функции не полагается на нулевое завершение, изменение безопасно.

Но если реализация полагается на нулевое завершение, то изменение будет небезопасным, пока эта реализация не будет изменена.

Предполагая, что реализация функции не полагается на нулевое завершение, будет небезопасно.

...