Function in C++ returns by value or by reference?

C++ functions can return by value, by reference (but don’t return a local variable by reference), or by pointer (again, don’t return a local by pointer).

When returning by value, the compiler can often do optimizations that make it equally as fast as returning by reference, without the problem of dangling references. These optimizations are commonly called “Return Value Optimization (RVO)” and/or “Named Return Value Optimization (NRVO)”.

Another way to for the caller to provide an empty vector (by reference), and have the function fill it in. Then it doesn’t need to return anything.

You definitely should read this blog posting: Want Speed? Pass by value.

Leave a Comment