 <p>To understand the difference it will be helpful to consider a more simple example. Let;s assume that there are two stand-alone functions</p> <pre><code>int f() { static int x; return x; } int &amp; g() { static int x; return x; } </code></pre> <p>As you see the both functions have the same body and return statements.</p> <p>The difference between them is that in the first case a copy of static variable x is returned while in the second case a reference to static variable x is returned.</p> <p>So in the second case you can do for example the following</p> <pre><code>g() = 10; </code></pre> <p>and variable x defined in the body of the function will be changed.</p> <p>In the first case you may not and can not do the same. In this case a temporary int object is created that is a copy of variable x.</p>