2015-03-31 63 views
2

MSDN的std ::原子<>运算符++在MSVC

Ty atomic<Ty>::operator++(int) volatile _NOEXCEPT; 
Ty atomic<Ty>::operator++(int) _NOEXCEPT; 
Ty atomic<Ty>::operator++() volatile _NOEXCEPT; 
Ty atomic<Ty>::operator++() _NOEXCEPT; 

前两个操作符返回增加后的值;最后两个运算符在增量之前返回值

但是,C++ 11文档从该运营商as

修改后的原子变量的值定义的回报。形式上,以* this的修改顺序递增/递减该函数的效果之前的值。

为什么MSVC++编译器使用非标准定义?

回答

4

这是MSDN上的文档错误。此测试程序(LIVE):

#include <atomic> 
#include <iostream> 

template <typename T> 
void foo(T&& t) { 
    std::cout << ++t << '\n'; 
    std::cout << t++ << '\n'; 
    std::cout << static_cast<int>(t) << '\n'; 
} 

int main() 
{ 
    foo(0); 
    foo(std::atomic<int>{0}); 
} 

正确输出:

 
1 
1 
2 
1 
1 
2 

当由VS2013编译。

+0

谢谢,这是我的错误。 – 23W 2015-03-31 16:37:39