关于struct中String字段的问题不理解的地方,请明白人给讲解一下,万分感谢!!!

AI摘要
该内容展示了Rust语言中结构体实例的创建与字段所有权转移。当`user2`直接使用`user1.username`(一个`String`类型)时,发生了所有权的移动,导致`user1`的`username`字段在后续不可用,但这并不违反`user1`绑定本身的不可变性,因为移动的是其内部字段的所有权。这是一个关于Rust所有权系统核心概念的【知识分享】。

struct User {
active: bool,
username: String,
email: String,
sign_in_count: u64,
}

fn main() {
// –snip–

let user1 = User {
    email: String::from("someone@example.com"),
    username: String::from("someusername123"),
    active: true,
    sign_in_count: 1,
};

let user2 = User {
    active: user1.active,
    username: user1.username,
    email: String::from("another@example.com"),
    sign_in_count: user1.sign_in_count,
};

}
其中user2.username使用user1.username,致使user1.username变的不可用,但user1是不可变的,这是否违背了不可变变量的准则?

讨论数量: 5

这个只有所有权转移问题吧

4天前 评论

说的对,但其作为struct中的一个字段,尤其是不可变变量user1,竟然使其变量突然变化,难道不是违背了不可变变量的安全规则了吗?

4天前 评论
deatil 4天前

只是user1.usename字段我在重新赋值之前,无法再读取该值,也就是该值不可用,是不是相当于已经直接将该值置Null,等于未赋值状态?也就是等于改变了该值?改变了变量user1?

4天前 评论
deatil 3天前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!