【发布时间】:2018-05-19 14:58:18
【问题描述】:
来自 C++,我很惊讶这段代码在 Rust 中有效:
let x = &mut String::new();
x.push_str("Hello!");
在 C++ 中,您不能获取临时地址,并且临时地址不会超过它出现的表达式。
临时在 Rust 中存在多长时间?而且由于x只是借用,那么字符串的所有者是谁?
【问题讨论】:
-
在 C++ 中,您不能获取临时地址 — 我不懂 C++,但这总是正确的吗? Does a const reference prolong the life of a temporary?
-
@Shepmaster
&x取x的地址,我相信这对临时人员永远无效。我可能应该将此与创建对临时对象的引用进行比较,这确实是可能的,甚至延长了临时对象的寿命,因此总体而言,其行为实际上与 Rust 所做的非常相似。 -
@SvenMarnach:你可以完美地在 C++ 中获取临时地址,
struct T { T* me() { return this; } };将返回给你T实例的地址,无论它是否是临时地址。此外,C++ 允许将 const 引用或 r 值引用绑定到临时对象,并且对它的引用只不过是变相的指针。 -
@MatthieuM。是的,我做的比较没有任何意义。我应该将它与在 C++ 中创建引用进行比较,而不是仅仅因为语法看起来相似而与
&temp进行比较。 -
@SvenMarnach:不用担心 :) 语法很相似,效果也很相似(因为引用是指针),所以看起来很自然的错误。只是 Stroustrup 以某种方式决定了一些允许的事情,而另一些则不是因为他有一种直觉,这很容易出错......事后看来,缺乏一致性可能更令人困惑:)