std::cout 中两个堆栈大小(使用 size())之间的差异

Difference between two stack size (using size()) in std::cout

我很困惑为什么两个打印语句给出不同的输出。附上下面的代码片段。任何帮助,将不胜感激。谢谢。

    stack<int>st1;
    stack<int>st2;
    
    st2.push(222);
    
    cout<<"st1 size:"<<st1.size()<<endl;
    cout<<"st2 size:"<<st2.size()<<endl;
    
    int a=st1.size();
    int b=st2.size();
    cout<<"difference:"<<a-b<<endl;
    cout<<"difference:"<<(st1.size()-st2.size())<<endl; //why this is giving different ans
    /* output:
        st1 size:0
        st2 size:1
        difference:-1
        difference:4294967295
     */

因为int是有符号类型,而std::stack::size()returns是无符号值。

当结果超出类型可表示的值范围时,无符号整数的计算回绕。

看一下成员函数size的return类型。我打赌你会发现它是一个无符号类型。

当你用无符号整数计算 0u - 1 时会发生什么?结果不能为 -1,因为该数字不能用无符号类型表示。结果将是一个正数,与 -1 模可表示值的数量一致。这也是该无符号类型可表示的最大值。