pop_back () Rückgabewert?
Warum nicht pop_back()
haben einen Wert zurück? Ich habe Gegoogelt in Bezug auf diese und fand heraus, dass es macht es effizienter. Ist dies der einzige Grund dafür, dass es so in der Norm?
InformationsquelleAutor der Frage Parvinder Singh | 2012-09-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es ist etwas mit der Tatsache zu tun, dass das kopieren einer Instanz des letzten Objekts könnte eine exception werfen. Wenn Sie dies tun, Sie verlieren Ihr Objekt, da pop_back() habe entfernen Sie es aus dem container. Besser mit ein paar Zeilen code:
InformationsquelleAutor der Antwort yves Baumes
Effizienz hat das wenig (oder gar nichts) zu tun.
Dieser Entwurf ist das Ergebnis ein wichtiges Papier von Tom Cargill, veröffentlichte in den 90er Jahren, das ausgelöst wird, durchaus ein paar Augenbrauen dann zurück. IIRC, es Cargill zeigte, dass es unmöglich ist zu entwerfen eine Ausnahme sichere stack-pop-Funktion.
InformationsquelleAutor der Antwort sbi
Es ist, weil der Befehl-Abfrage-separation-Prinzip.
InformationsquelleAutor der Antwort Abyx
Effizienz ist eine Sache. Ein weiterer Grund für
pop_back()
- nicht wieder ein element exception-Sicherheit.Wenn die
pop()
Funktion zurückgegeben wird der Wert, und eine Ausnahme wird ausgelöst, indem der copy-Konstruktor, Sie möglicherweise nicht in der Lage zu garantieren, dass die container in den gleichen Zustand wie es war vor dem Aufrufpop()
.Finden Sie mehr infos in Herb Sutters Bücher über Ausnahmen. Ich denke, dieses Thema ist bedeckt hier. Aber ich bin mir nicht sicher.
InformationsquelleAutor der Antwort mkaes
Der Grund dafür ist nicht so viel Effizienz wie exception-Sicherheit. Die container-Klasse verwendet werden kann zum speichern von jeglicher Art von Objekten. Es wäre unmöglich zu realisieren pop_back() zu einer exception sichere Weise, ob die Funktion zurückkehren würde, das Objekt nach dem löschen aus dem container, denn die Rückgabe der Wert des Objekts beinhaltet die copy-Konstruktion.
Dies ist die eigentliche Implementierung vector::pop_back() in GNU-C++ - standard-Bibliothek:
Dies ist, was es Aussehen würde, sollte es wieder das Letzte element am Ende:
Diese umfasst zwei Kopie-Konstruktionen, an der
save = back()
Anweisung und bei der Rückkehr eine Kopie des Objekts. Es gibt keine Garantien, dass der return-Ausdruck wird nicht werfen eine Ausnahme, nach der das element zerstört wurde aus dem container.InformationsquelleAutor der Antwort Seppo Enarvi
Nun, wie viele Gründe es sein?
Dies vermeidet potenziell kostspielige kopieren des Objekts, wenn Sie nur wollen, um es zu entfernen aus dem container. C++ hat die Philosophie nicht zu zahlen, für das, was Sie nicht brauchen.
InformationsquelleAutor der Antwort Zdeslav Vojkovic
Warum wäre es Wert? Sie können jederzeit auf den Wert zugreifen, jederzeit vor knallen Sie es aus - es besteht keine Notwendigkeit für
pop_back
um diese Funktionalität zu bieten.InformationsquelleAutor der Antwort Puppy