Почему функции-члены набора значений не рекомендуются в выступлении Херба Саттера на CppCon 2014 (Назад к основам: современный стиль C ++)?

В выступлении Херба Саттера на CppCon 2014 «Назад к основам: современный стиль C ++» он ссылается на слайд 28 (веб-копия слайдов здесь) к этой схеме:

class employee {
  std::string name_;
public:
  void set_name(std::string name) noexcept { name_ = std::move(name); }
};

Он говорит, что это проблематично, потому что при вызове set_name () с временным значением noexcept-ness не является сильным (он использует фразу «noexcept-ish»).

Теперь я довольно интенсивно использую описанный выше шаблон в своем недавнем коде на C ++, в основном потому, что он экономит каждый раз, когда я печатаю две копии set_name () - да, я знаю, что это может быть немного неэффективно, если каждый раз форсировать конструкцию копирования, но эй, я ленивый типер. Однако фраза Херб "Это не исключениепроблематичный«Меня беспокоит то, что я не вижу здесь проблемы: оператор присваивания перемещения std :: string является noexcept, как и его деструктор, так что set_name () мне кажется гарантированно noexcept. Я вижу потенциальное исключение, выдаваемое компилятордо set_name (), поскольку он подготавливает параметр, но я изо всех сил пытаюсь увидеть это как проблематичное.

Позже на слайде 32 Херб четко заявляет, что вышесказанное является анти-паттерном. Может кто-нибудь объяснить мне, почему я не пишу плохой код, будучи ленивым?

Ответы на вопрос(4)

Ваш ответ на вопрос