2015-03-31 25 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

相關問題