提问者:小点点

为什么借个临时就合法了?


来自C++,我很惊讶这段代码在Rust中是有效的:

let x = &mut String::new();
x.push_str("Hello!");

在C++中,您不能使用临时的地址,并且临时的时间不会超过它出现在其中的表达式。

临时工在铁锈中生活多长时间?而且由于x只是一个借方,那么字符串的所有者是谁呢?


共1个答案

匿名用户

为什么借个临时就合法了?

它是合法的,因为在C++中它是非法的--因为有人说它应该是这样的。

临时工在铁锈中生活多长时间?而且由于x只是一个借方,那么字符串的所有者是谁呢?

参考资料说:

表达式的临时作用域是包含该表达式的最小作用域,用于下列内容之一:

  • 整个函数体。
  • 语句。
  • ifwhileloop表达式的正文。
  • if表达式的else块。
  • ifwhile表达式或match保护的条件表达式。
  • 匹配臂的表达式。
  • 惰性布尔表达式的第二个操作数。

本质上,您可以将您的代码视为:

let mut a_variable_you_cant_see = String::new();
let x = &mut a_variable_you_cant_see;
x.push_str("Hello!");

另见:

  • 为什么可以返回对局部文本的引用,而不能返回对变量的引用?
  • 未命名值的范围是什么?
  • 在Rust中,用于临时时间的原始指针可以吗?