Warum sollte optional <T &> bei Zuweisung neu gebunden werden?
Es gibt eine anhaltende Debatte darüber, wasoptional
undvariant
sollte mit Referenztypen zu tun haben, insbesondere im Hinblick auf die Zuweisung. Ich möchte die Debatte zu diesem Thema besser verstehen.
optional<T&> opt;
opt = i;
opt = j; // should this rebind or do i=j?
erzeit ist die Entscheidung zu treffen,optional<T&>
schlecht geformt und machenvariant::operator=
schlecht geformt, wenn einer der Typen ein Referenztyp ist - um das Argument zu umgehen und uns dennoch den größten Teil der Funktionalität zu geben.
Was ist das Argument, dassopt = j
sollt die zugrunde liegende Referenz erneut binden? Mit anderen Worten, warumsollt wir implementierenoptional
so was
template <class T>
struct optional<T&> {
T* ptr = nullptr;
optional& operator=(T& rhs) {
ptr = &rhs;
return *this;
}
};