根据这个前缀std::atomic<T>::operator++
返回 a T
,所以这段代码只增加v
一次:
template<class T> void addTwo(std::atomic<T>& v) {
++(++v);
}
此外,std::atomic<T>::operator=
显然返回 a 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
在这方面与内置类型的行为不同?