Why is it legal to borrow a temporary?

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 or loop expression.
  • The else block of an if expression.
  • The condition expression of an if or while expression, or a match
    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?

Leave a Comment

tech