Нет смысла обновлять ваш код, потому что строковый литерал имеет тип символьного массива.
Было бы плохой идеей создать промежуточный объект, например, std :: string для выполнения такогопростая задача.
С c-строками, объявленными как массивы, используйте строковые функции C.Строковые функции языка C оптимизированы и иногда выполняются с помощью пары машинных инструкций.
В других контейнерах используются функции-члены или стандартные алгоритмы.
Сравните, например, два подхода
const char *s = "abcd";
const char *p = strchr( s, c );
if ( p )
{
//...
}
Или даже как
const char *s = "abcd";
if ( const char *p = strchr( s, c ) )
{
//...
}
и
const char *s = "abcd";
size_t n = std::strlen( s );
auto it = std::find( s, s + n, c );
if ( it != s + n )
{
//...
}
Или менее читаемые в C ++ 17
const char *s = "abcd";
size_t n = std::strlen( s );
if ( auto it = std::find( s, s + n, c ); it != s + n )
{
//...
}
Очевидно, что первый подход более эффективен.
С другой стороны, если у вас есть общая функция, которая должна принимать c-строки и / или объекты типа std::string
затем, если функция не изменяет их, используйте std::string_view
в качестве параметра функции.