Warum gibt std::queue::pop() keinen Wert zurück?
Das Fehlen eines Rückgabewerts in std: :queue::pop() ergibt sich aus dem Bedürfnis nach Sicherheit angesichts von Ausnahmen.
Die ursprüngliche Frage hebt hervor, dass die Überprüfung eines Elements aus std::queue::front() beinhaltet immer noch das Kopieren des Elements. Der entscheidende Unterschied liegt jedoch in der Möglichkeit von Ausnahmen während des Kopiervorgangs.
Betrachten Sie eine Implementierung von std::queue::pop(), die das Popup-Element zurückgibt:
template<class T> class queue { T pop() { auto x = elements[top_position]; --top_position; // alter queue state return x; // calls T(const T&) which may throw } };
Wenn der Kopierkonstruktor von T bei der Rückgabe einen Throw auslöst, wurde der Warteschlangenstatus bereits geändert, aber das Element wird nicht zurückgegeben. Dies könnte zu Datenverlust führen.
Darüber hinaus ist eine solche Implementierung ineffizient, wenn der kopierte Wert nicht benötigt wird, da dadurch eine unnötige Kopie erstellt wird.
Um Sicherheit und Effizienz zu gewährleisten, ist daher std ::queue::pop() wurde als Void-Funktion konzipiert, sodass Clients std::queue::front() verwenden müssen, um den Wert zu überprüfen, ohne eine Kopie zu erstellen.
Das obige ist der detaillierte Inhalt vonWarum gibt „std::queue::pop()' das geplatzte Element nicht zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!