"Код должен быть читаемым" говорили ониРассмотрите два примера кода.
Пример 1
token.channel = std::string(first, second);
Пример 2
std::string tmp (first, second);
token.channel.swap(tmp);
Как вы думаете, какой из них быстрее?
На первый взгляд, делают они одно и то же одинаковым образом (ну, почти одинаковым) - конструируют строку из итераторов и используют move semantic чтобы положить ее на место, верно? А первый пример удобочитаем, и именно он должен использоваться, аминь?
Тадаааааам! Пример 2 быстрее в абсолютном исчислении на 25%. (Так как оба фрагмента взяты из тела цикла с лямбдой, ну, вы понели, да, чем пахнут спелые фиги? Пахнут они фигово)
Почему так получается? Во втором примере нету temporary (да, не смотрите на название переменной tmp, она на стеке и с хорошей локальностью) и алгоритмическая сложность сильно меньше (и на 140 байт меньше ассемблера, и не по данным godbolt). А string.swap вообще самая быстрая штука. Кроме того, это единственная возможность реализовать emplace (конструирование на месте) для контейнеров string.
PS.
Казалось бы, что такого? Возьмем Xeon X5470 вместо ARM, всего делов-то. И пусть сервер пашет, он железянный, верно? Зато код читаемый. 😂😂😂