std :: queue :: size()可以在size()== 0的pop()之后返回一个巨大的数字

emr*_*ney 0 c++ libstdc++ c++11

我有链接在这里我push(x)10 int秒,然后pop()11和大小不是0,或一个例外,但一个重要的数字(可能== std::numeric_limit<size_type>::max()).我认为这是内部表示只是做一个size--而不是检查已经empty()案例的结果.这似乎是stdc ++库中的一个错误.

http://coliru.stacked-crooked.com/a/27ae7f10855e6c23

Mat*_*son 9

它被称为"未定义的行为".为了节省实现时间(不检查它是否已经为空),尽管存在"无法减少",但实现将简单地减少.不要这样做(在另一个实现上它可能不会这样做,所以绝对不要依赖它做任何有意义的事情).由于它未定义,它也可能在您的调制解调器上拨出到澳大利亚,擦除您的硬盘或导致应用程序崩溃.或者是其他东西...