If I have the following code, is the vector copied?
std::vector x = y.getTheVector();
or would it depend on whether the return t
std::vector x = y.getTheVector();
This is copy-initialization. There are three possible scenarios:
getTheVector()
is a lvalue reference. In this case, the copy constructor is always invoked.getTheVector()
is a temporary. In this case, the move constructor may be called, or the move/copy may be completely elided by the compiler.For this line,
std::vector& x = y.getTheVector();
This only compiles if getTheVector
returns a lvalue reference; a temporary cannot be bound a non-const lvalue reference. In this case, no copy is ever made; but the lifetime problem may be tricky.