¿Por qué no se recomiendan las funciones de los miembros que establecen valores en la charla CppCon 2014 de Herb Sutter (Volver a lo básico: Estilo moderno de C ++)?

En la charla de Herb Sutter CppCon 2014 Volver a lo básico: Estilo moderno de C ++ al que se refiere en la diapositiva 28 (una copia web de las diapositivas está aquí) a este patrón:

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

Él dice que esto es problemático porque cuando se llama a set_name () con un temporal, noexcept-ness no es fuerte (usa la frase "noexcept-ish").

Ahora, he estado usando el patrón anterior bastante en mi propio código C ++ reciente principalmente porque me ahorra escribir dos copias de set_name () cada vez; sí, sé que puede ser un poco ineficiente al forzar una construcción de copia cada vez, pero bueno, soy un tipejo perezoso. Sin embargo, la frase de Herb "Esto sin excepción esproblemático"me preocupa, ya que no entiendo el problema aquí: el operador de asignación de movimiento de std :: string es noexcept, al igual que su destructor, por lo que set_name () anterior me parece garantizado noexcept. Veo una posible excepción lanzada por el compiladorantes de set_name () ya que prepara el parámetro, pero estoy luchando por ver eso como problemático.

Más adelante en la diapositiva 32 Herb dice claramente que lo anterior es un antipatrón. ¿Alguien puede explicarme por qué no he estado escribiendo código incorrecto por ser flojo?

Respuestas a la pregunta(4)

Su respuesta a la pregunta