Nach this Präfix std::atomic<T>::operator++
eine T
zurückgibt, so dass dieser Code inkrementiert nur v
einmal:Liefert std :: atomic :: operator ++ wirklich nach Wert?
template<class T> void addTwo(std::atomic<T>& v) {
++(++v);
}
, auch std::atomic<T>::operator=
apparently kehrt ein T
, so dass dieser Code dereferenziert ein ungültiger Zeiger, der auf einen temporären T
Punkt verwendet:
Ich bin ganz sicher nicht, dass diese Codemuster gute Praxis sind, aber es ist sehr überraschend t o mir, dass std::atomic
bricht sie. Ich erwarte immer operator=
und Präfix operator++
, um einen Verweis auf *this
zurückzugeben.
Frage: Ist cppreference Recht, über die Rückgabetypen hier, und wenn ja, gibt es einen guten Grund dafür, dass std::atomic
verhalten sich anders als integrierte Typen in dieser Hinsicht?
Wenn 'operator =' ein 'T' zurückgibt, dann' & (v = 1) 'sollte nicht kompilieren, oder? –
@ R.MartinhoFernandes: Weil es ein rvalue temporär ist? –
Gibt es einen Lvalue zurück? Wenn nicht, dann wird das zweite ++ nicht kompilieren, so dass du zumindest vom Buggy-Verhalten gerettet wirst, wenn du das erwartet hast. – CashCow