Überprüfen der Dokumentation online Ich sah, dass es als Referenz übergeben wird. Kann jemand bestätigen, dass der Stack tatsächlich eine Kopie der Daten erstellt?Das Drücken auf einen STL-Stapel wird als Verweis ausgeführt, aber erstellt der Stapel eine Kopie des Werts?
Antwort
Ja, it does copy the element you give it. In C++ 11 kann es auch verschoben werden, wenn Sie ihm eine temporäre oder std::move
eingeben.
Beachten Sie, dass C++ 11 auch emplace
bietet, die direkt den Wert in-place Konstruktor Argumenten erstellt.
Kommt drauf an. Der Wert wird kopiert, aber es funktioniert möglicherweise nicht so, wie Sie es sich gedacht haben. Wenn Sie einen Zeiger wie char*
drücken, kopiert es nur den Zeigerwert und nicht die gesamte Zeichenfolge. Wenn Sie eine einfache int
oder CustomObject
drücken, aber nicht den Zeiger, wird es kopiert.
Der Parameter für den stack
Adapter selbst Bezug genommen wird, aber denken Sie daran, dass stack
nur ein Adapter - seine push
sofort die push_back
fordert, dass gleiche Parameter. Dieser Aufruf übergibt den Parameter jedoch als Wert.
Daher wird der Parameter, den Sie übergeben, kopiert - der Durchlauf mit Bezug auf std::stack
bedeutet, dass er nur einmal kopiert wird. Wenn das ein wertmäßiger Wert wäre, würde es zweimal kopiert werden (wobei der Compiler, der die Kopie ablegt, im Augenblick ignoriert wird, was er fast sicher tun würde).
- 1. Unboxing erstellt keine Kopie des Werts. Ist das richtig?
- 2. Einen Verweis auf eine Kopie aus einer C++ - Methode zurückgeben
- 3. Erstellt der Zugriff auf MemoryCache eine Kopie?
- 4. Warum wird in der constexpr-Funktion ein Verweis auf const-Zeiger zurückgegeben, aber keine Kopie zurückgegeben?
- 5. Erstellt libpcap immer eine Kopie des Pakets?
- 6. Wird beim Zurückgeben einer Referenz von einem unique_ptr manchmal eine Kopie des Objekts erstellt?
- 7. Speichern Sie einen Verweis auf eine Zeichenfolge
- 8. Wird eine Kopie erstellt, wenn Funktion eine data.table zurückgibt?
- 9. Wie bekomme ich die Kopie des Objekts, das geklickt wird
- 10. Wie gebe ich einen veränderbaren Verweis auf einen Builder, aber nur einen unveränderlichen Verweis auf das erstellte Objekt?
- 11. Wird beim Konvertieren von Bytearray in Byte eine Kopie erstellt?
- 12. Wie erstellt man eine Kopie des Ausgangszustands eines Arrays?
- 13. JavaScript: Verweis auf einen lokalen Bereich für Funktionen als Objekt
- 14. Wie erstellt man einen regulären Job, der täglich in node.js auf der Serverseite ausgeführt wird?
- 15. Wie wird die Systemumgebungsvariable als Teil des @PropertySource-Werts verwendet?
- 16. INSERT-Anweisung wird ausgeführt, erstellt aber keine neuen Zeilen?
- 17. Wie übergebe ich einen Verweis auf eine Methode als Parameter
- 18. Stapel nicht leer aber leerer Stapel Ausnahmefehler
- 19. Mehr als eine Kopie derselben "eckigen App" auf der Seite
- 20. Verweis auf eine Datei innerhalb des Krieges
- 21. Wie erstellt man eine Kopie des ArrayList-Objekts, das Listentyp ist?
- 22. Erstellt der Import eine neue Kopie der importierten Bibliothek?
- 23. Codeblock verhindert, dass Skript ausgeführt wird, aber interaktiv ausgeführt wird
- 24. PHP, Wird eine Kopie des Objekts in einigen Fällen gelöscht?
- 25. Verweis auf einen Zeiger
- 26. Festlegen des AsyncPostBackTimeout-Werts von ScriptManager auf der ASP.NET-Inhaltsseite
- 27. Ist es möglich, einen Verweis auf das Array ausgewählter Werte auf einem Select2 zu erhalten?
- 28. Erstellt Gorutine eine tiefe Kopie oder flache Kopie?
- 29. Wie erstellt man eine Struktur auf dem Stapel in C?
- 30. Wie erstellt man eine Kopie eines Objekts?
Ein Verweis hinzugefügt, hoffe, es macht Ihnen nichts aus. –
@ NiklasB .: Du warst 30 Sekunden schneller als ich;) –