在线检查文档我看到它是通过引用传递的。有人可以确认堆栈实际上是复制数据吗?推送到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. 了解Haskell的`map` - 堆栈还是堆?
- 4. cin是堆栈还是堆栈?
- 5. 通过堆栈
- 6. 通过堆栈传递数据
- 7. “堆栈”是什么意思,而不是在推/弹出,但在“软件堆栈”
- 8. 是否可以添加一些堆栈到一个大堆栈?
- 9. 堆栈推送和流行
- 10. 如何溢出堆栈而不推送新的堆栈帧?
- 11. 码头堆栈群 - 服务副本没有传播到Mutli服务堆栈
- 12. 是否分配了ruby结构堆栈?
- 13. 全堆栈,堆栈交换等,什么是堆栈?
- 14. 通过AJAX创建动画'堆栈'
- 15. 创建堆栈CREATE_IN_PROGRESS
- 16. Bitnami堆栈是否有效?
- 17. 是否Zend_Db_Adapter :: beginTransaction()堆栈?
- 18. 堆上,而不是堆栈
- 19. 是堆栈或堆make_pair?
- 20. 什么是基于堆栈的引用?
- 21. 了解“堆栈”
- 22. 堆栈/堆上的对象创建?
- 23. 将SKB推送到网络堆栈
- 24. x86 - CALL指令是否总是将EIP指向的地址推送到堆栈?
- 25. 创建可模态被呈现或推送到导航堆栈
- 26. Numpy:新维矩阵的堆栈副本
- 27. XCode:是否可以创建可重用的堆栈视图?
- 28. 创建一个通用堆栈阵列
- 29. C#7.0中引用返回的值是否存储在堆栈或堆上?
- 30. 绕过核心数据堆栈传递
添加了参考链接,希望您不介意。 – 2012-03-27 00:51:38
@NiklasB .:你比我快30秒;) – 2012-03-27 00:52:19