为什么临时借用是合法的?

2023-12-30

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

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

在 C++ 中,您无法获取临时值的地址,并且临时值的寿命不会比它出现的表达式的寿命长。

临时在 Rust 中存在多久?自从x只是借用,那么该字符串的所有者是谁?


为什么临时借用是合法的?

它是合法的,就像它在 C++ 中是非法的一样 —因为有人说事情就应该如此 https://doc.rust-lang.org/1.48.0/reference/destructors.html#temporary-scopes.

临时在 Rust 中存在多久?自从x只是借用,那么该字符串的所有者是谁?

参考文献说 https://doc.rust-lang.org/1.48.0/reference/destructors.html#temporary-scopes:

表达式的临时范围是 包含表达式且适用于以下其中一项的最小范围:

  • 整个函数体。
  • 一份声明。
  • 一个的身体if https://doc.rust-lang.org/1.48.0/reference/expressions/if-expr.html#if-expressions, while https://doc.rust-lang.org/1.48.0/reference/expressions/loop-expr.html#predicate-loops or loop https://doc.rust-lang.org/1.48.0/reference/expressions/loop-expr.html#infinite-loops表达。
  • The else块的if表达。
  • 的条件表达式if or while表达式,或match guard.
  • 火柴臂的表达式。
  • a 的第二个操作数惰性布尔表达式 https://doc.rust-lang.org/1.48.0/reference/expressions/operator-expr.html#lazy-boolean-operators.

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

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

也可以看看:

  • 为什么我可以返回对本地文字的引用而不是变量? https://stackoverflow.com/q/50345139/155423
  • 未命名值的范围是什么? https://stackoverflow.com/q/47044453/155423
  • Rust 中指向临时变量的原始指针可以吗? https://stackoverflow.com/q/41815619/155423
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么临时借用是合法的? 的相关文章

随机推荐

  • 不带列名的动态汇总

    如何根据列的字符串数组动态构造汇总语句 deviceTelemetry summarize
  • Node 7.1.0 new Promise() 解析器未定义不是函数

    我在 OSX 上使用最新的节点版本 7 1 0 但我仍然无法使用 Promises 我明白了 index js new Promise Error new Promise 类型错误 未定义的承诺解析器不是函数 Node 7 1 0不支持ES
  • 访问模块内的 IRQ 描述数组并显示操作名称

    我正在用 C 语言编写一个内核模块 该模块正在努力访问 IRQ 描述数组元素并显示这些元素的所有操作名称 一开始 我认为这个 irq desc 数组就像一个宏 但编译后我明白它不是 然后我使用了 for each irq desc irq
  • 安装 python 模块时出错

    我正在尝试使用标准安装 python 模块python setup py install但我收到以下错误 我对 python 相当陌生 但过去我已经能够以这种方式安装其他模块 我对这个模块的印象setuptools不是我应该从我的 pyth
  • 将初始查询集限制为 django-rest 框架中分页中的对象

    我正在定义一个ModelViewSet using django rest framework 我需要覆盖默认查询集 以便在渲染响应之前对查询集对象执行一些处理 这个过程非常耗时 因此我只想在由于分页响应而实际可供消费者使用的对象上执行它
  • oracle 18中通过json_table解析json

    有一个请求例如 with j sJson as select ID 1444284517 ID ORD 4255 2187606199 Vals CODE ONB2B3BB8 DORD 25 04 2021 from dual select
  • 如何在 RxSwift 中检测可观察对象在特定时间内是否未发出任何事件

    我正在尝试检测是否有可观察的 我的情况按钮 rx tap 在 3 秒内没有发出任何值 如果是的话 我想更新用户界面 到目前为止 这是我的尝试 Observable
  • Struts 2 - 了解 OGNL 和参数拦截器之间的工作原理

    我是 Struts 2 的新手 我正在从 Struts2 In Action 一书中学习它 我很难理解 OGNL 中的一些概念 如下所示 我们知道params拦截器将数据从请求参数移动到操作对象中ValueStack 现在 在阅读时 我看到
  • 检查 TreeView 中选中的节点数

    我是使用树视图的新手 我希望能够确保树视图只能检查一个子节点 如果有人尝试检查多个子节点 它会停止检查事件并取消选择所有父节点和子节点 我该怎么做呢 到目前为止 这就是我所得到的 但它表现得很奇怪 有什么建议么 Update 为了澄清一些事
  • AppleScript - 在 Firefox 上执行 JavaScript

    Safari 和 Chrome 可以通过 AppleScript 执行 JavaScript Safari tell application Safari open location http example com activate do
  • 我应该如何从字符串中删除所有前导空格? - 迅速

    我需要一种方法来删除字符串中的第一个字符 空格 我正在寻找一种方法 甚至是 String 类型的扩展 我可以用它来剪切字符串的字符 要删除前导和尾随空格 let trimmedString string stringByTrimmingCh
  • 如何在 matplotlib 中覆盖 shapefile

    In matplotlib how to overlay the shapefile available in folder as attached below at the top right position outside the p
  • 如何在 iOS 中创建具有动态 tableview 高度的动态 tableview 单元格

    我想根据内容增加表格视图单元格和表格视图高度 假设tableview包含2条记录 第一个单元格高度为100 第二个单元格高度为25 那么tableview高度应该是100 25 125 如何实现这个功能呢 提前致谢 你绝对可以做到这一点 首
  • 根据多列的最大值减少分组数据

    我有像这个例子这样的数据集 但每个输入有 1000 个输入和 1000 个单词 每个输入 x 时间 x 单词组合有 30 个值 在 Copy1 Copy30 列中 df read table header T sep text Input
  • 使用 Flask Web 应用程序监控实时数据流

    这是基于发布的答案https stackoverflow com a 13388915 819544 https stackoverflow com a 13388915 819544 我想监视数据流并将其推送到类似于上面答案的前端 但是一
  • hasattr 用于嵌套属性

    我需要这样的东西 伪代码 if hasattr object detail infotext 我的意思是我想检查对象是否有属性details如果有 那么如果details有一个名为infotext 我可以这样做 if hasattr obj
  • 如何使用 Python Amazon Simple Product API 获取产品价格

    我似乎无法得到this https github com yoavaviram python amazon simple product api图书馆工作 我得到了我的访问密钥 秘密和关联标签 我正在遵循与中所解释的完全相同的事情READM
  • SpringMVC HTTP 状态 405 - 不支持请求方法“POST”

    我有一个表单 我从该表单查询数据库 并将结果发布到另一个页面 然后 我从查询结果中选择一条记录 它会将我带回到我进行查询的页面 以便我可以更新记录 我单击更新 这将我带回到控制器并使用首先调用查询的相同方法 但是请求的参数现在是 更新 因此
  • 缓存特定的 Javascript 和 CSS 文件

    如何缓存一些特定的 JavaScript 和 CSS 文件 我从这个网站找到了建议 将其放入我的 htaccess file AddOutputFilter DEFLATE css js ExpiresActive On ExpiresBy
  • 为什么临时借用是合法的?

    来自 C 我很惊讶这段代码在 Rust 中是有效的 let x mut String new x push str Hello 在 C 中 您无法获取临时值的地址 并且临时值的寿命不会比它出现的表达式的寿命长 临时在 Rust 中存在多久