Search code examples
c++functionreturn

Do functions return the result object by value or by reference?


When a function (callee) returns an object to the caller function, is it returned by value or by reference?

I have written a function which builds a large vector when called. I want to return this vector to the calling main function by constant reference so I can do some further processing on it.

I was in doubt because I was told that when a C++ function returns and terminates, all the variables/memory associated with that function, get wiped clean.

struct node {
    string key;
    int pnum;
    node* ptr;
};

vector<vector<node>> myfun1(/* Some arguments */) {
    /* Build the vector of vectors. Call it v. */
    return v;
}

int main() {
    a = myfun1(/* Some arguments */)
}

Solution

  • 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.