为什么一个整型变量在赋值给另一个变量后仍然可以使用?

2024-03-29

我试图了解 Rust 中的所有权是如何运作的。考虑以下简单示例:

let u_own = 3432;
let d_own = u_own;
println!("{}", u_own);

编译器不会抱怨,尽管所有权来自值3432已移至d_own。最后一条语句是println!打印号码3432控制台上没有任何问题。

我原以为编译器会抱怨,因为所有权已被转移。


所有权永远不会移动。对于任何标记为的类型std::marker::Copy(我们说类型“is Copy”),赋值运算符不会移动所有权。它创建该值的副本。

Rust 中的原始类型是Copy默认情况下,您可以自由地在您自己的任何类型上派生该标记,但您应该为小型类型保留它。通常使用简单的枚举Copy.

如果您使用的类型不是Copy,那么你的预期行为就会出现。例如。 AString:

fn main() {
    let u_own = String::new();
    let d_own = u_own;
    println!("{}", u_own);
}
error[E0382]: borrow of moved value: `u_own`
 --> src/main.rs:4:20
  |
2 |     let u_own = String::new();
  |         ----- move occurs because `u_own` has type `String`, which does not implement the `Copy` trait
3 |     let d_own = u_own;
  |                 ----- value moved here
4 |     println!("{}", u_own);
  |                    ^^^^^ value borrowed here after move
  |
  = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)

For more information about this error, try `rustc --explain E0382`.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么一个整型变量在赋值给另一个变量后仍然可以使用? 的相关文章

随机推荐

  • 如何保证两个div的高度相同?

    假设我在包装器中有 2 个并排的 div div div div div div div primary width 50 float left secondary width 50 如何确保 div secondary 始终与 div m
  • 正则表达式避免了Java中不必要的回溯

    你好 我是正则表达式世界的新手 我想在 Java 测试字符串中提取时间戳 位置和 id str 字段 20110302140010915 user is translator false show all inline media fals
  • postgresql 删除重复行

    我只想删除具有相同名称的重复行 但我想保留这些行的值高于其他行 问题是 当我执行代码时 所有重复的行都被删除 并且没有一个被保留 为什么这样 SELECT name from select name ROW NUMBER OVER PART
  • 反应路由器中的查询字符串

    我正在尝试使用查询字符串设置路由路径 内容如下 www mywebsite com results query1 query1 query2 query2 query3 query3 我会像这样过渡到 结果 组件
  • 锚链接在 iPad 上无法正常工作

    我们在 iPad 上遇到了固定元素的问题 您可以在这里查看我们的布局 http cibology edoardobiasini it http cibology edoardobiasini it The position fixed右侧的
  • 十六进制浮点文字中的十六进制“E/e”与指数形式的“E/e”如何区分?

    在 C 中 如果我想要一个浮点文字 x 为十六进制形式并具有指数值 它将表示为 float x 0X2aE 10 其中0x用于表示它是十六进制的 2a用于表示十六进制字符 E 10用于表示十的10次方的数字 然而 编译器是否知道它不是 2a
  • 为什么当我在 switch 语句中为每个枚举常量都有情况时,我仍然必须提供默认值吗? [复制]

    这个问题在这里已经有答案了 我试图在 Java 中声明一个枚举 并在 switch 语句中使用该类型的变量 其中涵盖了该类型枚举常量的所有可能情况 enum MyEnum FOO BAR private static void test M
  • 按版本对字符串列表进行排序

    我有一个字符串列表 每个字符串都遵循模式 Path UpdateTo Version Order 我需要对列表进行排序 使最低版本号位于顶部 如果存在多个具有相同版本号的文件 则附加一个可选的顺序参数 如果任何字符串上存在订单 那么它应该出
  • 以 cm 为单位调整图像大小 C#

    我有一个要求 要求提供 10 X 6 88 厘米的图像 我知道我不能简单地将厘米转换为像素 因为一个像素大小取决于用户显示分辨率 我想知道是否有办法调整图像大小以达到该尺寸 以厘米为单位 我还需要保留图像扩展名 例如 无法将其转换为 pdf
  • 在hive中如何将字符串转换为数组?

    我使用的是蜂巢1 1 hive gt select country from releases limit 1 OK us ca fr 目前 国家在 hive 中是字符串类型 如何将其转换为数组 String 我尝试了下面的方法 但它抛出错
  • Spring MVC 中的嵌套异常处理

    我收到以下错误 org springframework web util NestedServletException 请求处理失败 嵌套异常是 java lang NullPointerException 为了在控制器中处理这个问题 我使
  • 如何将钩子添加到 uberjar 进程中(使用 lein 构建)

    我想向 uberjar 进程添加一个钩子 具体示例是将 maxmind geoip dat 文件下载到资源文件夹中 以便每次部署时都会将更新版本捆绑到 jar 中 示例 建议表示赞赏 谢谢 我建议创建一个调用 uberjar 的自定义 le
  • 将查询结果从 BigQuery 导出到 Postgres

    我正在尝试导出 BigQuery 中的查询结果 并将数据导入 Postgres 数据可能多达 2 5 亿条记录 约 26Gb 选项1 将查询结果保存到临时表 将表导出为 csv 批量更新插入到 postgres 这会很慢 选项2 以某种方式
  • EhCache和数据库刷新

    我正在使用 Spring 和 ehcache 使用查询将数据填充到缓存中 此过程必须每 10 分钟发生一次 有配置可以设置吗 提前致谢 通常 ehCache 将用于给出一个 ttl 以自动使缓存失效 根据我从您的问题中收集到的信息 您要求每
  • 需要在SQL Server 2008中使用CTC来实现业务需求

    对小规模的实施会有很大的帮助SP以满足以下要求 业务规则是 EndDate 应该是下一个规则的开始日期 否则规则不应该是 视为连续的 并将被视为其他规则系列 如 在下面的示例中显示有两个系列 因为第四个系列 它已经打破了记录 RuleId
  • 如何使用 Fish shell 设置宝石路径?

    如何使用 Fish shell 正确设置宝石路径 sanoy nice system D c h bellevue gt gem 安装包 警告 您的 PATH 中没有 home sanoy gem ruby 2 2 0 bin gem 可执
  • 如何使用java/spring boot读取Vault kv

    我正在尝试弄清楚如何使用Hashicorp s Vault与弹簧靴 最初 我尝试遵循该指南 https spring io guides gs vault config scratch https spring io guides gs v
  • Xcode 8 不显示整个 NSLog 输出

    今天升级到 Xcode 8 GM 后 我注意到 NSLog 没有将整个日志消息打印到控制台 当处理下载大量信息的 API 时 这一点尤其明显 例如 REST API 从数据库下载所有产品 它只显示第一个产品的前 30 个键 其余信息被裁剪
  • 在 Ruby 中实现贝叶斯分类器?

    我想实现一个简单的贝叶斯分类系统来对短信进行基本的情感分析 欢迎在 Ruby 中实施的实用建议 除贝叶斯之外的其他方法的建议也将受到欢迎 Ilya Grigorik 在这篇博客文章中对这个问题有一个很好的答案贝叶斯分类器 http www
  • 为什么一个整型变量在赋值给另一个变量后仍然可以使用?

    我试图了解 Rust 中的所有权是如何运作的 考虑以下简单示例 let u own 3432 let d own u own println u own 编译器不会抱怨 尽管所有权来自值3432已移至d own 最后一条语句是println