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

标签 c++ c++11 libstdc++

我在这里有链接 push(x) 10 int s,然后 pop() 11 并且大小不是 0,也不是一个异常(exception),而是一个巨大的数字(可能是 == std::numeric_limit<size_type>::max() )。我认为这是内部表示简单地执行 size-- 的结果并且不检查已经 empty()案件。这似乎是 stdc++ 库中的错误。

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

最佳答案

它被称为“未定义的行为”。为了节省实现时间(不检查它是否已经为空),实现将简单地递减,尽管“没有什么可以递减”。不要那样做(在另一个实现中它可能不会那样做,所以绝对不要依赖它做任何有意义的事情)。由于它是未定义的,它也可能会在您的调制解调器上拨出到澳大利亚,删除您的硬盘或导致应用程序崩溃。或者别的……

关于c++ - std::queue::size() 在 pop() of size() == 0 之后可以返回一个巨大的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28245673/

相关文章:

c++11 - 如何实现作用域 guard 在作用域退出时恢复值(value)?

c++ - gcc 4.8 或更早版本是否存在关于正则表达式的问题?

c++ - 为什么 C++ 可执行文件在与较新的 libstdc++.so 链接时运行速度如此之快?

c++ - 谁在使用 g++ 构建二进制文件时确定 GLIBCXX_version?

c++ - 链表的冒泡排序

c++ - 如何在 Windows 上编译 libevent2?

c++ - 理解 C++ 中的递归

c++ - 纹理未在屏幕上绘制

c++ - 是否存在与 Eigen::Matrix<> constexpr 构造函数相关的信息?

c++ - 为什么 std::is_nothrow_move_assignable 取决于析构函数的存在?