This page last changed on Oct 19, 2006 by mmccorma.

Don't do this:

std::string& f();
const std::string& g(); // Not much better

Instead do this:

std::string f();
std::string g();

std::string is designed expressly to allow you to treat strings as simple pass-by-value types, like int. It's efficient to return by value rather than reference and it avoids core dumps if the real string hidden away in f gets deleted before the reference. In particular it allows f() to compute once-off values and forget about them, e.g.:

std::string hello(const std::string& name) { return "hello " + name; }

With the "&" style return this would be an immediate disaster as the returned reference is invalid before the caller even gets it! NB. The last example contains another error! See BewareOfStringPromotion.

Document generated by Confluence on May 26, 2010 10:31