Rust中的as和unsafe,修改不可变的结构体

本文展示了如何在 Rust 中使用 `unsafe` 关键字来修改不可变引用的结构体字段。示例中定义了一个 `Test` 结构体,然后通过 `change` 方法实现了在不破坏借用规则的情况下改变 `field` 字段的值。在 `main` 函数中,我们创建了一个 `Test` 实例并观察到 `field` 的值在调用 `change` 方法后发生了变化。
摘要由CSDN通过智能技术生成
#[derive(Debug)]
pub struct Test {
    pub field: String,
}

impl Test {
    pub fn change(&self) {
        unsafe {
            let mutable_t: &mut Test = &mut *(self as *const Self as *mut Self);
            mutable_t.field = "changed".into();
        }
    }
}

fn main() {
    let t = Test {
        field: "default".into(),
    };
    println!("{:?}", t);
    t.change();
    println!("{:?}", t);
}

运行结果如下,field的值被改变了:

Test { field: "default" }
Test { field: "changed" }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值