I was reading this SO question and found that best practice is to return by a value. so I ran below two examples in godbolt with ARM gcc 10.2(linux) compiler to get assembly instructions for both
1.
#include <iostream>
#include <vector>
std::vector<int> return_vector(void)
{
std::vector<int> tmp {1,2,3,4,5};
return tmp;
}
int main()
{
std::vector<int> && rval_ref = return_vector();
while(1){}
return 0;
}
- Almost same but without
&&
#include <iostream>
#include <vector>
std::vector<int> return_vector(void)
{
std::vector<int> tmp {1,2,3,4,5};
return tmp;
}
int main()
{
std::vector<int> rval_ref = return_vector();
while(1){}
return 0;
}
now code with rvalue &&
has more instructions compared to code without rvalue reference. shouldn't they be same ?
Below are extra assembly instructions for code with rvalue reference
(left is code with rvalue ref &&
and right is code without it.)