Avatar ·

¿Es hora de abandonar la transmisión de const std::string& en los parámetros de funciones?

¡Hola a todos! Soy nuevo en C++ y constantemente veo en libros y artículos antiguos el consejo de pasar strings a funciones como const std::string&. Pero recientemente me topé con una discusión donde decían que en C++11 y versiones posteriores esto ya no es una buena práctica. Al parecer, debido a la move semantics, es más eficiente pasar strings por valor en lugar de por referencia constante. Estoy completamente confundido. Aquí hay un ejemplo de mi código: ```cpp void processData(const std::string& name) { // ... algún trabajo con name, pero sin copia std::cout << name << std::endl; } void storeData(const std::string& name) { // Aquí quiero guardar name en un miembro de la clase m_name = name; // ¿esto es una copia? } ``` El primer caso es solo lectura del string. El segundo es guardarlo en un campo del objeto. ¿Realmente const std::string& está obsoleto? ¿Cuándo debería usarlo y cuándo es mejor pasar el string por valor (std::string)? ¿O tal vez debería usar std::string_view? Por favor, explíquenme de manera sencilla, con ejemplos, qué opción es más óptima en cada caso.