T
を返し
std::atomic<T>::operator++
thisプレフィックスによれば
ので、このコードは一度だけv
をインクリメント:またstd :: atomic :: operator ++は本当に値で復帰しますか?
template<class T> void addTwo(std::atomic<T>& v) {
++(++v);
}
、std::atomic<T>::operator=
apparently戻りT
ので、このコードは、一時T
を指すために使用される無効なポインタを間接参照。
template<class T>
void setOneThenTwo(std::atomic<T>& v) {
auto ptr = &(v = 1);
*ptr = 2;
}
私は最も確かに、しかし、それは非常に驚くべきトンで、これらのコードパターンは良い習慣であることを示唆しているわけではありません私にはstd::atomic
が壊れています。私はいつもoperator=
と接頭辞operator++
が*this
への参照を返すことを期待しています。
質問:はここ戻り値の型についてcppreferenceされており、その場合、内蔵のより種類この点で異なっstd::atomic
振る舞いを持つための十分な理由があるのですか?
'operator ='が 'T'を返した場合、'&(v = 1) 'はコンパイルすべきではないでしょうか? –
@ R.MartinhoFernandes:これは一時的な価値であるためですか? –
左辺値を返しますか?もしそうでなければ、2番目の++はコンパイルされませんので、少なくともあなたはバグの行動から救われるでしょう。 – CashCow