在線檢查文檔我看到它是通過引用傳遞的。有人可以確認堆棧實際上是複製數據嗎?推送到STL堆棧是通過引用傳遞的,但堆棧是否創建了值的副本?
1
A
回答
7
是的,it does copy the element you give it。在C++ 11中,如果你給它一個臨時的或者std::move
的話,它也可以移動它。
請注意,C++ 11還提供emplace
,它直接在給定的構造函數參數中構造值。
1
這取決於。該值被複制,但可能無法按您的想法工作。如果您推動一個指針,如char*
,它將只複製指針值,而不是整個字符串。如果您正在推送一個簡單的int
或CustomObject
而不是指針,它將被複制。
1
參數stack
適配器本身是參考,但請記住,stack
只是一個適配器 - 其push
立即調用push_back
,傳遞相同的參數。然而,這個調用通過值來傳遞參數。
因此,您傳遞的參數會被複制 - 通過引用傳遞給std::stack
意味着它只被複製一次。如果這是一次價值傳遞,那麼它將被複制兩次(目前忽略編譯器將拷貝刪除,幾乎肯定會這樣)。
相關問題
- 1. 裝配通過堆棧傳遞變量
- 2. 通過堆棧傳遞數據
- 3. 「堆棧」是什麼意思,而不是在推/彈出,但在「軟件堆棧」
- 4. 如何溢出堆棧而不推送新的堆棧幀?
- 5. 碼頭堆棧羣 - 服務副本沒有傳播到Mutli服務堆棧
- 6. 通過AJAX創建動畫'堆棧'
- 7. Bitnami堆棧是否有效?
- 8. 是否Zend_Db_Adapter :: beginTransaction()堆棧?
- 9. 什麼是基於堆棧的引用?
- 10. 堆棧/堆上的對象創建?
- 11. Numpy:新維矩陣的堆棧副本
- 12. 創建一個通用堆棧陣列
- 13. C#7.0中引用返回的值是否存儲在堆棧或堆上?
- 14. 繞過核心數據堆棧傳遞
- 15. 當一個已經存在的指針被推入堆棧時,它的副本是否被創建?
- 16. 哈希表「未初始化的值是通過堆棧分配創建的」
- 17. C++ STL內存管理:堆棧還是堆?
- 18. 全局聲明是堆棧還是堆?
- 19. C++是堆棧還是堆分配?
- 20. 我是否在swift中實現了自己的堆棧? swift是否像Java一樣在庫中有堆棧?
- 21. 是我的代碼堆棧?
- 22. JVM - 堆棧和堆棧
- 23. 希望堆棧堆棧?
- 24. 未初始化的值是由堆棧分配創建的
- 25. 堆棧列一行通過
- 26. 從堆棧創建JSON
- 27. 什麼創建堆棧?
- 28. 在sml中創建堆棧
- 29. Try/Except塊是否創建自己的堆棧?
- 30. 遞歸Java - 堆棧
添加了參考鏈接,希望您不介意。 – 2012-03-27 00:51:38
@NiklasB .:你比我快30秒;) – 2012-03-27 00:52:19