Tôi đã xem qua trang này nhưng tôi không thể lấy được lý do tương tự. Ở đó nó được đề cập rằng
"hợp lý hơn nếu nó không trả về giá trị nào và yêu cầu khách hàng sử dụng front () để kiểm tra giá trị ở đầu hàng đợi"
Nhưng việc kiểm tra một phần tử từ front () cũng yêu cầu phần tử đó phải được sao chép trong lvalue. Ví dụ trong đoạn mã này
std::queue<int> myqueue;
int myint;
int result;
std::cin >> myint;
myqueue.push (myint);
/ * ở đây tạm thời sẽ được tạo trên RHS sẽ được gán cho kết quả, và trong trường hợp nếu trả về bằng tham chiếu thì kết quả sẽ không hợp lệ sau thao tác bật * /
result = myqueue.front(); //result.
std::cout << ' ' << result;
myqueue.pop();
trên đối tượng cout dòng thứ năm đầu tiên tạo một bản sao của myqueue.front () sau đó gán nó cho kết quả. Vì vậy, sự khác biệt là gì, chức năng pop có thể làm điều tương tự.
front()
cũng yêu cầu phần tử đó phải được sao chép trong giá trị" - không, không. front
trả về một tham chiếu, không phải một giá trị. Bạn có thể kiểm tra giá trị mà nó đề cập đến mà không cần sao chép nó.
pop()
. Nếu bạn sử dụng std::queue<T, std::list<T>>
thì không lo ngại về việc tham chiếu được cung cấp khỏi front()
bị vô hiệu bởi a push()
. Nhưng bạn phải biết cách sử dụng của mình và nên ghi lại các ràng buộc của bạn.
void std::queue::pop();
).