Rendimiento de string_view Vs const char*
¿Es mejor usar un parámetro std::string_view
en lugar de const char*
en el código siguiente?
void func( const std::string_view str )
{
std::istringstream iss( str.data( ) ); // str se pasa al constructor de istringstream
<pre><code>std::size_t pos { };
int num { std::stoi( str.data( ), &pos, 10 ) }; // y aquí se pasa a std::stoi
</code></pre>
<p>}</p>
<p>int main()
{
std::array<char, 20> buffer { };
std::cin.getline( buffer.data( ), 20 );
func( buffer.data( ) );
}
Tanto el constructor de std::istringstream
como std::stoi
requieren un parámetro de tipo const std::string&
. Pero se les pasa un objeto std::string_view
usando su función miembro data()
. ¿Es esto una mala práctica? ¿Debo volver a utilizar const char*
?
davy.ai
Usar un parámetro
std::string_view
es mejor que unoconst char*
en este código.std::string_view
es una vista ligera y no propietaria de una cadena de caracteres. Proporciona una forma más segura y flexible de manejar cadenas de caracteres porque puede aceptar cualquier objeto similar a una cadena que proporcione un puntero a sus datos y su longitud. También evita la necesidad de crear un objeto temporal de cadena cuando se pasa una cadena de caracteres literal o unconst char*
a una función, lo que puede ser más eficiente. Por lo tanto, usarstd::string_view
puede mejorar el rendimiento y la mantenibilidad del código.