【发布时间】:2012-04-10 12:48:59
【问题描述】:
在线查看文档,我看到它是通过引用传递的。有人可以确认堆栈实际上复制了数据吗?
【问题讨论】:
在线查看文档,我看到它是通过引用传递的。有人可以确认堆栈实际上复制了数据吗?
【问题讨论】:
是的,it does copy the element you give it。在 C++11 中,如果你给它一个临时的或 std::move 它也可以移动它。
请注意,C++11 还提供了emplace,它在给定构造函数参数的情况下直接就地构造值。
【讨论】:
这取决于。该值已被复制,但它可能无法像您想象的那样工作。如果您正在推送一个指针,例如char*,它将只复制指针值,而不是整个字符串。如果您推送的是简单的int 或CustomObject 而不是指针,它将被复制。
【讨论】:
stack 适配器本身的参数是引用,但请记住 stack 只是一个适配器 - 它的 push 立即调用 push_back,传递相同的参数。但是,此调用按值传递参数。
因此,您传递的参数确实会被复制——通过引用传递给std::stack 意味着它只被复制一次。如果这是按值传递,那么它将被复制两次(暂时忽略编译器会删除副本,它几乎肯定会)。
【讨论】: