推送到STL堆栈是通过引用传递,但堆栈是否复制了值?

时间:2012-03-27 00:48:58

标签: c++ stl stack

在线查看文档我看到它是通过引用传递的。有人可以确认堆栈实际上是复制数据吗?

3 个答案:

答案 0 :(得分:7)

是的,it does copy the element you give it。在C ++ 11中,如果你给它一个临时的或std::move,它也可以移动它。

请注意,C ++ 11还提供emplace,它在给定构造函数参数的情况下直接构造值。

答案 1 :(得分:1)

这取决于。该值已复制,但可能无法正常工作。如果您正在推动指针(例如char*),它将仅复制指针值,而不是整个字符串。如果您要推送简单的intCustomObject而不是指针,则会复制它。

答案 2 :(得分:1)

stack适配器本身的参数是引用,但请记住stack只是一个适配器 - 它的push会立即调用push_back,并将其传递给std::stack参数。但是,此调用会按值传递参数。

因此,您传递的参数会被复制 - 通过引用传递给{{1}}意味着它只被复制一次。如果这是一个值传递,那么它将被复制两次(忽略,目前,编译器忽略了副本,它几乎肯定会这样)。