Warum werden in Herb Sutters Vortrag zur CppCon 2014 Funktionen für Setter-Mitglieder nicht empfohlen (Zurück zu den Grundlagen: Moderner C ++ - Stil)?
n Herb Sutters CppCon-Vortrag 2014 Zurück zu den Grundlagen: Moderner C ++ - Stil verweist er auf Folie 28 ine Webkopie der Folien finden Sie hie) zu diesem Muster:
class employee {
std::string name_;
public:
void set_name(std::string name) noexcept { name_ = std::move(name); }
};
Er sagt, dass dies problematisch ist, weil beim Aufrufen von set_name () mit einem temporären Wert das Noexcept-ness nicht stark ist (er verwendet den Ausdruck "noexcept-ish").
Jetzt habe ich das obige Muster in meinem aktuellen C ++ - Code ziemlich häufig verwendet, da ich dadurch nicht jedes Mal zwei Kopien von set_name () eingeben muss - ja, ich weiß, dass dies ein bisschen ineffizient sein kann, wenn ich jedes Mal eine Kopierkonstruktion erzwinge , aber hey, ich bin ein fauler Typ. Allerdings Herbs Satz "Dieses noexcept istproblematisc "macht mir Sorgen, da ich das Problem hier nicht bekomme: Der Verschiebungszuweisungsoperator von std :: string ist noexcept, ebenso wie der Destruktor. Daher scheint mir set_name () oben garantiert zu sein, noexcept. Ich sehe eine mögliche Ausnahme durch der CompilerVo set_name () als es bereitet den Parameter, aber ich habe Mühe, das als problematisch zu sehen.
päter auf Folie 32. Herb gibt deutlich an, dass das oben Gesagte ein Anti-Muster ist. Kann mir jemand erklären, warum ich nicht durch Faulheit schlechten Code geschrieben habe?