gpt4 book ai didi

rust - 为什么这个右值没有提升为引用中指定的左值?

转载 作者:行者123 更新时间:2023-11-29 07:48:46 26 4
gpt4 key购买 nike

Rust Reference说:

The left operand of an assignment or compound-assignment expression is an lvalue context, as is the single operand of a unary borrow.

[...]

When an rvalue is used in an lvalue context, a temporary un-named lvalue is created and used instead.

这种右值提升显然适用于借用:

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没有提到这个右值提升。这是引用中的错误还是确实有某种方法可以通过赋值或复合赋值表达式触发右值提升?

还有第三种左值上下文,引用文献对其描述也不正确。只要存在一个带有 ref 的模式,绑定(bind)到该模式的左值就是一个左值上下文。事实证明,促销在​​这种情况下有效:

let ref x = 3;  // works

显然,仅提升不适用于(复合)作业?

最佳答案

The reference自发布此问题以来已更新。现在它说右值到左值的提升不会在赋值期间发生,所以这显然是旧引用中的一个错误。

Borrow operators :

If the & or &mut operators are applied to an rvalue, a temporary value is created

这可能也适用于 ref 绑定(bind),尽管我没有看到它被明确提及。

Assignment :

The left-hand operand must be an lvalue: using an rvalue results in a compiler error, rather than promoting it to a temporary.

关于rust - 为什么这个右值没有提升为引用中指定的左值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41520642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com