Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #80680

Re: [ #include <stack> ] What's the difference?

From Andrey Tarasevich <andreytarasevich@hotmail.com>
Newsgroups comp.lang.c++
Subject Re: [ #include <stack> ] What's the difference?
Date 2021-07-06 12:50 -0700
Organization A noiseless patient Spider
Message-ID <sc2c64$ut5$1@dont-email.me> (permalink)
References <sa0877$3h9$1@dont-email.me> <savqan$4de$1@dont-email.me> <sb2t4f$a4d$1@dont-email.me>

Show all headers | View raw


On 6/24/2021 2:23 PM, James Kuyper wrote:
> On 6/23/21 1:17 PM, Andrey Tarasevich wrote:
>> On 6/11/2021 10:55 AM, SIMON wrote:
>>> Does anybody know the significant difference between:
>>>
>>>> myStack.push(30);
>>>>
>>>> myStack.emplace(30);
>>>>
>>> It does the same thing as far as I can see but surely there must be
>>> something that I don't know about these two methods.
>>
>> Without the exact type of 'myStack' the question is meaningless and does
>> not have an answer.
> 
> What more do you need to know about the the type of myStack that you
> don't already know?
> The subject line says "#include <stack>", so you can reasonably presume
> from its name that myStack is of type std::stack<T, Container> for some
> values of T and Container. 

I need to know what `T` is. I need to know whether `myStack` holds 
`int`s, or `myStack` holds something else, perhaps some non-trivial, 
unrelated, possibly "heavy" type, which just happens to be implicitly 
convertible from `int`.

For `T == int` the difference between the variants would be purely 
conceptual, without any practical consequences.

For a "heavy" `T` the difference between these two variants can be 
substantial. `push` would construct a temporary followed by two moves 
from it into a new container entry, while `emplace` would construct a 
new container entry in-place from the twice-forwarded `30`.

-- 
Best regards,
Andrey Tarasevich

Back to comp.lang.c++ | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[ #include <stack> ] What's the difference? SIMON <invalid@invalid.invalid> - 2021-06-11 17:55 +0000
  Re: [ #include <stack> ] What's the difference? SIMON <invalid@invalid.invalid> - 2021-06-11 18:08 +0000
    Re: [ #include <stack> ] What's the difference? scott@slp53.sl.home (Scott Lurndal) - 2021-06-11 18:21 +0000
  Re: [ #include <stack> ] What's the difference? Richard Damon <Richard@Damon-Family.org> - 2021-06-11 14:29 -0400
  Re: [ #include <stack> ] What's the difference? Kli-Kla-Klawitter <kliklaklawitter69@gmail.com> - 2021-06-11 20:35 +0200
  Re: [ #include <stack> ] What's the difference? Manfred <noname@add.invalid> - 2021-06-12 20:06 +0200
    Re: [ #include <stack> ] What's the difference? Kli-Kla-Klawitter <kliklaklawitter69@gmail.com> - 2021-06-12 20:12 +0200
    Re: [ #include <stack> ] What's the difference? MrSpook_mlauoyv4F_@o18rpnvgrx0dq.co.uk - 2021-06-13 08:34 +0000
      Re: [ #include <stack> ] What's the difference? Öö Tiib <ootiib@hot.ee> - 2021-06-13 04:31 -0700
  Re: [ #include <stack> ] What's the difference? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-06-23 10:17 -0700
    Re: [ #include <stack> ] What's the difference? James Kuyper <jameskuyper@alumni.caltech.edu> - 2021-06-24 17:23 -0400
      Re: [ #include <stack> ] What's the difference? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-07-06 12:50 -0700
        Re: [ #include <stack> ] What's the difference? James Kuyper <jameskuyper@alumni.caltech.edu> - 2021-07-06 21:17 -0400
          Re: [ #include <stack> ] What's the difference? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-07-06 21:59 -0700

csiph-web