Why the result of returning lvalue from function is that that object std::vector<int> v
in main()
function has same memory address as returned object std::vector<int> vec
in a get_vec()
function, even though these objects exist in a different stack frame ?
Why there is not called move constructor ?
#include <iostream>
#include <vector>
std::vector<int> get_vec()
{
std::vector<int> vec = { 1, 2, 3, 4, 5 };
std::cout << "get_vec():\n" << &vec << '\n' << vec.data() << "\n\n";
return vec;
}
int main()
{
std::vector<int> v = get_vec();
std::cout << "main():\n" << &v << '\n' << v.data() << "\n\n";
return 0;
}
OUTPUT:
get_vec():
0x7a07ee93baa0
0x226b290
main():
0x7a07ee93baa0
0x226b290