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