std::string f(){
return "xx";
}
int main(){
const std::string& ref = f();
// use ref
}
f
returns temporary string by value. main
"catch" it by const reference.
Is it ok in C++?
std::string f(){
return "xx";
}
int main(){
const std::string& ref = f();
// use ref
}
f
returns temporary string by value. main
"catch" it by const reference.
Is it ok in C++?
It is fine. Temporary could be bound to lvalue-reference to const or rvalue reference, and its lifetime will be extended to the lifetime of the reference.
Whenever a reference is bound to a temporary or to a subobject thereof, the lifetime of the temporary is extended to match the lifetime of the reference
Yes it's fine: the lifetime of the std::string
is extended to the lifetime of the const
reference.
But note that the behaviour is not transitive: i.e. don't assign a const
reference to ref
, expecting that to extend the lifetime even further.