在线查看文档我看到它是通过引用传递的。有人可以确认堆栈实际上是复制数据吗?
答案 0 :(得分:7)
是的,it does copy the element you give it。在C ++ 11中,如果你给它一个临时的或std::move
,它也可以移动它。
请注意,C ++ 11还提供emplace
,它在给定构造函数参数的情况下直接构造值。
答案 1 :(得分:1)
这取决于。该值已复制,但可能无法正常工作。如果您正在推动指针(例如char*
),它将仅复制指针值,而不是整个字符串。如果您要推送简单的int
或CustomObject
而不是指针,则会复制它。
答案 2 :(得分:1)
stack
适配器本身的参数是引用,但请记住stack
只是一个适配器 - 它的push
会立即调用push_back
,并将其传递给std::stack
参数。但是,此调用会按值传递参数。
因此,您传递的参数会被复制 - 通过引用传递给{{1}}意味着它只被复制一次。如果这是一个值传递,那么它将被复制两次(忽略,目前,编译器忽略了副本,它几乎肯定会这样)。