Why is it legal to borrow a temporary?
It’s legal for the same reason it’s illegal in C++ — because someone said that’s how it should be.
How long does the temporary live in Rust? And since
x
is only a borrow, who is the owner of the string?
The reference says:
the temporary scope of an expression is the
smallest scope that contains the expression and is for one of the following:
- The entire function body.
- A statement.
- The body of a
if
,while
orloop
expression.- The
else
block of anif
expression.- The condition expression of an
if
orwhile
expression, or amatch
guard.- The expression for a match arm.
- The second operand of a lazy boolean expression.
Essentially, you can treat your code as:
let mut a_variable_you_cant_see = String::new();
let x = &mut a_variable_you_cant_see;
x.push_str("Hello!");
See also:
- Why can I return a reference to a local literal but not a variable?
- What is the scope of unnamed values?
- Are raw pointers to temporaries ok in Rust?