Were we talking about the C++ idiom... const std::string & T''''hisHereFunction(); I am interested in the implications of using it or not using it in the context of some C++ code which is going to be called from a "soft" layer such as ToolCommandLanguage (Tcl). -- JohnFletcher ''It's bound to the lifetime of the containing object.'' In my opinion, you are better off returning a reference counted object by value. This makes it easier to manage the storage associated. Of course, something like std::basic_string< CharT > is already reference counted, so this doesn't apply here. Also note that if you are programming with ConstCorrectness, you should have no problems with mutability when returning a constant reference object by value. For an example implementation, check out CppCountedPointerImplementation. There are many others, this one strives to be similar to std::auto_ptr except for its exclusive, as opposed to shared, owner semantics. -- RobertDiFalco ----- Actually, the C++ standard does not require std::string to be reference counted. The strings are mutable, so it is jolly difficult to make a reference counted implementation be both correct and efficient, especially in a multi-threaded environment. I thought about this problem a while back when SGI first introduced its ''rope'' classes based on just this argument. I decided there are a number of compromises that make this a workable situation. One does not have to abandon the performance provided by referenced counted, copy on write, strings. Of course, there is also the operator[] problem, but that can also be worked around. YMMV. -- RobertDiFalco ----- I think of this idiom as a performance optimization. IE: Client code should think of this function as if it were defined... std::string T''''hisHereFunction(); That is, a client can do this... std::string mystring = T''''hisHereFunction(); but should never do this... const std::string & mystring = T''''hisHereFunction(); By returning a const reference ''(and telling clients they should act as if you're just returning the string),'' you avoid the construction and destruction of one temporary object. See PrematureOptimization. Contributors: JeffGrigg ----- See LifetimeOfReturnedReference ---- CategoryCpp