有关下面 C++代码的说法,正确的是( )。 
这题考的是队列(queue)的容量限制和空队列检查,核心在于 pop 里的 assert 断言。拿到题先看 moreData 类定义,tail<5 限制入队,head<tail 限制出队。连续 push 没问题,但第三次 pop 时队列为空,assert 会触发,程序直接终止,不会执行后面的 cout。
很多学生看到 push 返回*this 就以为链式调用一定合法,忽略了 pop 里的断言。还有人会误以为队列只要不越界就能无限 pop,忘了空队列时 head==tail,此时 assert(head<tail) 必假。最容易被骗的是选项 C,前两次 pop 确实能输出 4 和 5,但最后一次 pop 会触发 assert,程序直接结束,根本不会运行到最后一个 cout。
命题人把这道题放在 GESP 六级数据结构模块,就是要卡住那些以为“队列=数组”就能写代码的考生。真正的队列必须同时满足容量上限(防止越界)和空队列检查(防止非法出队)。这道题的陷阱就在于:push 的尾检查很直观,但 pop 里的 assert(head < tail) 才是真正决定程序生死的地方。