29
you are viewing a single comment's thread
view the rest of the comments
[-] BatmanAoD@programming.dev 2 points 11 months ago

The parts that seem likely to cause this confusion (which I shared when I first started using C++11) are:

  • Moves in C++ are always a potentially-destructive operation on a reference, not just a memcopy.
  • Consequently, "moving" a temporary still requires having two separate instances of the type, despite that generally not being what you want, hence RVO.
  • ...but move-semantics are generally presented and understood as an "optimization", and conceptually "take the guts of this value and re-use them as a new value" is both what RVO is doing and what move-semantics are doing.
  • std::move isn't a compiler intrinsic and doesn't force a move operation; it's just a function that returns an r-value reference. So it makes it harder, not easier, for the compiler to "see through" and optimize away, even in the case where "as if" rule should make that legal.
this post was submitted on 25 Nov 2023
29 points (96.8% liked)

C++

1732 readers
1 users here now

The center for all discussion and news regarding C++.

Rules

founded 1 year ago
MODERATORS