Is it OK to return a reference to a local variable from a function? By local I mean that the variable would be created(on the stack i.e. without using new) within the function and its scope is within that function only. I got contradictory answers when I searched about this. 1) says that kind of usage is correct but 2) contradicts it.
1) http://functionx.com/cpp/examples/returnreference.htm
2) http://www.cprogramming.com/tutorial/references.html (under References & Safety section)
Which of them is right?
Another question I had is, if 1) is right then are the following serve same purpose.
i) int& a = func();
ii) int a = func(); where func() returns a reference to an int (local variable in that function).
In both the above cases, there is no copying of return value involved isn’t it. I would like to prevent copying of return values since the return value could be large.
Thank you in advance.
Raghava.
As everybody else is saying, don’t do that. Returning a reference or pointer to a local variable is always wrong, because the act of returning gets rid of the local variable and hence the reference or pointer is automatically invalid.
Copying may not be an issue. C++ compilers are allowed to skip copy constructors when returning from functions (the “return value optimization”), so a sufficiently smart compiler might be able to build the value in place. Therefore, you may well be able to return a large value without any copying. Try it and see; you can temporarily put output statements in the copy constructor (if you’ve written one and aren’t using the automatically generated one) to see if it’s actually called.
So, without running and trying, you don’t know whether there is actual copying going on, and if so how much of a problem it is. As always, time and profile a run to see if there is a problem and, if so, where. Doing anything risky and/or confusing to speed up performance is almost never worth doing before timing and profiling.