Я пытаюсь понять семантику перемещения, rvalue-ссылки, std::move
и т.д. Я пытался выяснить, просматривая различные вопросы на этом сайте, почему менее рекомендуется использовать const std::string &name
+ _name(name)
чем a std::string name
+ _name(std::move(name))
, если требуется копия.
Если я правильно понимаю, для следующего требуется одиночная копия (через конструктор) плюс перемещение (от временного к члену):
Dog::Dog(std::string name) : _name(std::move(name)) {}
Альтернативный (и старомодный) способ - передать его по ссылке и скопировать его (из ссылки на участника):
Dog::Dog(const std::string &name) : _name(name) {}
Если для первого метода требуется копирование и перемещение обоих, а для второго метода требуется только одна копия, как первый метод может быть предпочтительным, а в некоторых случаях быстрее?