【问题标题】:std::atomic<> operator++ in MSVCMSVC 中的 std::atomic<> operator++
【发布时间】:2015-03-31 14:30:50
【问题描述】:

来自MSDN

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++ 编译器使用非标准定义?

【问题讨论】:

    标签: c++11 msvcrt


    【解决方案1】:

    这是 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 编译时。

    【讨论】:

    • 谢谢,这是我的错。
    猜你喜欢
    • 2012-10-25
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2016-01-02
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多