Oí una reciente charla por Herb Sutter, quien sugirió que las razones para aprobar std::vector
y std::string
por const &
son en gran parte desaparecido. Él sugirió que la escritura de una función como la siguiente ahora es preferible:
std::string do_something ( std::string inval )
{
std::string return_val;
// ... do stuff ...
return return_val;
}
Entiendo que el return_val
será un r-value en el punto de la función de devoluciones y por lo tanto puede ser devuelto con mover la semántica, que son muy baratos. Sin embargo, inval
todavía es mucho más grande que el tamaño de una referencia (que es generalmente implementados como un puntero). Esto es así porque, std::string
tiene varios componentes, incluyendo un puntero a la pila y un miembro char[]
de cadena corta de optimización. Así que me parece que pasar por referencia es una buena idea.
¿Alguien puede explicar por qué la Hierba podría haber dicho esto?