为什么这个右值没有提升为参考中指定的左值?

时间:2017-01-07 10:55:21

标签: rust language-lawyer rvalue lvalue

Rust Reference说:

  

赋值或复合赋值表达式的左操作数是左值上下文,一元借用的单个操作数也是如此。

     

[...]

     

当在左值上下文中使用右值时,会创建并使用临时的未命名左值。

这种左值促销显然适用于借款:

let ref_to_i32 = &27;  // a temporary i32 variable with value 27 is created

但它似乎并没有在作业中发挥作用(虽然引用说的是所有左值上下文,而不仅仅是借用):

27 = 28;   // error[E0070]: invalid left-hand side expression

error description of E0070并未提及此左值促销。这是引用中的错误还是确实有某种方法可以通过赋值或复合赋值表达式触发rvalue促销?

还有第三种左值上下文,参考描述也不正确。只要其中存在带有ref的模式,绑定到该模式的左值就是左值上下文。事实证明,促销适用于这种情况:

let ref x = 3;  // works

显然,促销只对(复合)作业不起作用吗?

1 个答案:

答案 0 :(得分:2)

自此问题发布以来,

The reference已更新。现在它说左升值的左值不会在赋值期间发生,所以这显然是旧参考中的一个错误。

Borrow operators

  

如果&或者& mut运算符应用于右值,创建临时值

这可能也适用于ref绑定,虽然我没有明确提到它。

Assignment

  

左侧操作数必须是左值:使用右值导致编译器错误,而不是将其提升为临时值。