当前位置: 首页 > 知识库问答 >
问题:

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

夏青青
2023-03-14

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

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

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

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

共有1个答案

洪高刚
2023-03-14

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

它是合法的,因为在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中,用于临时时间的原始指针可以吗?
 类似资料:
  • 如果我有一个封装两个成员的结构,并基于另一个成员更新其中一个,那么只要我这样做就可以了: 也就是说,当我直接提到self时。b 。但当我将do\u stuff()更改为以下内容时: 编译器抱怨:<代码>无法将`*self`借用为不可变,因为` self `。a `也被借用为可变的。 如果我需要执行比返回成员更复杂的操作来获取a.do\u something()的参数,该怎么办?我必须创建一个按值返

  • 本文向大家介绍为什么用relu就不用sigmoid了相关面试题,主要包含被问及为什么用relu就不用sigmoid了时的应答技巧和注意事项,需要的朋友参考一下 参考回答: Sigmoid的导数只有在0的附近时有比较好的激活性,在正负饱和区域的梯度都接近0,会导致梯度弥散。而relu函数在大于0的部分梯度为常数,不会产生梯度弥散现象。Relu函数在负半区导数为0,也就是说这个神经元不会经历训练,就是

  • 问题内容: 我用来从使用dockerfile构建的映像在docker容器上运行我的js应用程序。我是詹金斯(Jenkins)的高级初学者:)。 docker文件 jenkinsFile- 我正在使用顺序阶段。第一阶段是初始化,我在这里设置docker容器。docker映像在内部托管,我将其下拉并运行shell命令。为简单起见,我仅在此处添加相关阶段。 以下是构建输出中的相关部分。我已删除一些敏感信

  • 问题内容: 给出以下作为数据类的示例: 假设我会有一个国家清单 我想将这些信息流式传输到它们的区域及其对应的名称,我想执行以下操作: 但是,该代码无法编译,因为“ getRegions”的返回值是一个Collection(列表),而不是flatMap方法接受的Stream。但是由于我知道任何Collection都可以通过其Collection.stream()方法进行流传输,所以这应该不是问题。我

  • 我知道借阅检查器不允许多个可变借阅。例如,下面的代码无效: 但是,如果第一次借款因超出范围而被放弃,第二次借款是有效的: 由于非词汇生存期(NLL),第一次借用甚至不必超出范围-借用检查器只要求不再使用它。因此,以下代码在2018年有效: 但我不明白为什么下面的代码无效: 编译错误信息: 从错误消息中,我认为NLL可能还不支持这种情况。所以,我提前删除了: (铁锈操场) 但我得到了一个更令人困惑的

  • 我已经从github下载了代码,并通过npm Install安装了所有需要的节点模块。npm i(&N)。但我仍然面临着这种错误