Re: Simple question: extending lifetime of temporaries with a reference
On Nov 10, 2:01 am, Alan McKenney <alan_mckenn...@yahoo.com> wrote:
I've heard of "extending the lifetime of a temporary
by binding it to a reference",
Only by binding to reference to const. References to non-const can not
be bound to temporaries (also known as r-value).
but am not entirely sure of when that applies.
My impression is that if you do, say:
// sample 1
std::string str1( "String 1\n");
std::string str2( "string 2\n");
std::string &str_sum = str1 + str2;
The previous line should not compile (it may compile with M$
compilers). It should be:
std::string const& str_sum = str1 + str2;
std::cout << str_sum << str::endl;
then the temporary object "str1 + str2" won't be destroyed
until str_sum goes out of scope.
True.
On the other hand, I'm fairly convinced that
// sample 2
std::string &f() { std::string temp( "temp value"); return temp; }
void g() {
std::string &ret_val = f();
std::cout << ret_val << std::endl;
}
won't work.
1. Is this correct, or am I just terminally bewildered?
In this case function f() returns a reference, which is an l-value
rather than a temporary, therefore the rule does not apply here.
2. Are there any other situations where the lifetime
of a temporary can be extended beyond the
statement where it was generated?
Can't think of any other.
--
Max
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]