【问题标题】:Pushing onto an STL stack is pass by reference, but does the stack make a copy of the value?推入 STL 堆栈是通过引用传递的,但堆栈是否会复制该值?
【发布时间】:2012-04-10 12:48:59
【问题描述】:

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

【问题讨论】:

    标签: c++ stl stack


    【解决方案1】:

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

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

    【讨论】:

    • @NiklasB.: 你比我快 30 秒 ;)
    【解决方案2】:

    这取决于。该值已被复制,但它可能无法像您想象的那样工作。如果您正在推送一个指针,例如char*,它将只复制指针值,而不是整个字符串。如果您推送的是简单的intCustomObject 而不是指针,它将被复制。

    【讨论】:

      【解决方案3】:

      stack 适配器本身的参数是引用,但请记住 stack 只是一个适配器 - 它的 push 立即调用 push_back,传递相同的参数。但是,此调用按值传递参数。

      因此,您传递的参数确实会被复制——通过引用传递给std::stack 意味着它只被复制一次。如果这是按值传递,那么它将被复制两次(暂时忽略编译器会删除副本,它几乎肯定会)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-07
        • 1970-01-01
        • 2017-09-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多