In C++, what does & mean after a function's return type?

In a C++ function like this:

int& getNumber();

what does the & mean? Is it different from:

int getNumber();

Solution 1:

It's different.

int g_test = 0;

int& getNumberReference()
{
     return g_test;
}

int getNumberValue()
{
     return g_test;
}

int main()
{
    int& n = getNumberReference();
    int m = getNumberValue();
    n = 10;
    cout << g_test << endl; // prints 10
    g_test = 0;
    m = 10;
    cout << g_test << endl; // prints 0
    return 0;
}

the getNumberReference() returns a reference, under the hood it's like a pointer that points to an integer variable. Any change applyed to the reference applies to the returned variable.

The getNumberReference() is also a left-value, therefore it can be used like this:

getNumberReference() = 10;

Solution 2:

Yes, the int& version returns a reference to an int. The int version returns an int by value.

See the section on references in the C++ FAQ

Solution 3:

Yes, it's different.

The & means you return a reference. Otherwise it will return a copy (well, sometimes the compiler optimizes it, but that's not the problem here).

An example is vector. The operator[] returns an &. This allows us to do:

my_vector[2] = 42;

That wouldn't work with a copy.

Solution 4:

The difference is that without the & what you get back is a copy of the returned int, suitable for passing into other routines, comparing to stuff, or copying into your own variable.

With the &, what you get back is essentially the variable containing the returned integer. That means you can actually put it on the left-hand side of an assignment, like so:

getNumber() = 200;