我浏览了此页面,但无法获得相同的原因。那里提到
“更明智的做法是,它根本不返回任何值,并要求客户端使用front()来检查队列前端的值”
但是从front()检查元素还需要将该元素复制到左值中。例如在此代码段中
std::queue<int> myqueue;
int myint;
int result;
std::cin >> myint;
myqueue.push (myint);
/ *此处将在RHS上创建临时文件,并将其分配给结果,如果通过引用返回,则在弹出操作之后结果将变为无效* /
result = myqueue.front(); //result.
std::cout << ' ' << result;
myqueue.pop();
在第五行,cout对象首先创建myqueue.front()的副本,然后将其分配给结果。所以,有什么不同,pop函数可以做同样的事情。
front()
也需要将该元素复制到左值中”-不,不是这样。front
返回引用,而不是值。您可以检查它引用的值,而无需复制它。
pop()
。如果您使用std::queue<T, std::list<T>>
,则不必担心所提供的引用front()
是否会被引起无效push()
。但是您必须知道您的使用模式并应记录您的约束。
void std::queue::pop();
)。