Закончились ли дни передачи const std::string & в качестве параметра?
Я слышал недавний разговор Херба Саттера, который предположил, что причины пройти std::vector и std::string by const & в основном ушли. Он предположил, что теперь предпочтительнее написать такую функцию, как следующая:
std::string do_something ( std::string inval )
{
std::string return_val;
// ... do stuff ...
return return_val;
}
Я понимаю, что return_val будет rvalue в точке, возвращаемой функцией, и поэтому может быть возвращено с помощью семантики перемещения, которые очень дешевы. Однако,inval по-прежнему намного больше, чем размер ссылки (что обычно реализовано в виде указателя). Это потому что std::string имеет различные компоненты, включая указатель в кучу и член char[] для оптимизации коротких строк. Поэтому мне кажется, что переход по ссылке все еще хорошая идея.
может ли кто-нибудь объяснить, почему Херб мог это сказать?
Comments