this post was submitted on 18 Jun 2023
8 points (100.0% liked)
C++
321 readers
1 users here now
A place for C++ programmers discuss articles and news about programming in C++ and the language itself
founded 1 year ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
That's fascinating.
NVRO being optional annoys me. I'm always debating whether I should
std::move
the return value just in case, but if the compiler performs NVRO (which it probably does), this may be a pessimization right? Ugh.I think you should never
std::move
return values. Afaik every modern compiler does NRVO and manually moving prevents it. And on the offchance you need to use a compiler that optimizes less, that one copy most likely is the least of the performance concerns.Yeah this is what bothers me.
std::move
could make things worse, but not if the alternative is a copy. But you're probably right that any self-respecting compiler nowadays would do NRVO.I think compiler move return value by default, so even without NRVO you should never move a return value when it's a local non reference variable.
Well the
test3
example FTA gives a case where NRVO would not happen because of the conditional return value. Are you suggesting that you need notstd::move
even in this case?