nrvo - C++: should I explicitly use std::move() in a return statement to force a move? -


edit: not duplicate because question asks compiler's decision in o0.

it said here name return value optimization (nrvo) optimization many compiler support. must or nice-to-have optimization?

my situation is, want compile -o0 (i.e. no optimization), convenience of debugging, want nrvo enabled return statements return objects (say, vector). if nrvo not must, compiler won't in -o0 mode. in case, should prefer code:

std::vector<int> foo() {     std::vector<int> v(100000,1); // object big..     return std::move(v);  // explicitly move } 

over below?

std::vector<int> foo() {     std::vector<int> v(100000,1);     return v;    // copy or move? } 

edit: compiler using gcc6, want code compiler-independent.

you should prefer

std::vector<int> foo() {     std::vector<int> v(100000,1);     return v;    // move or nrvo } 

over

std::vector<int> foo() {     std::vector<int> v(100000,1);     return std::move(v);    // move } 

the second snippet prevent nrvo, , in worst case both move construct.


Comments

Popular posts from this blog

python Tkinter Capturing keyboard events save as one single string -

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

javascript - Z-index in d3.js -