trait里的默认函数会为每个类型拷贝一份

本文探讨了Rust编程语言中函数实现的复制现象,解释了为什么`Bar1::foo`和`Bar2::foo`的地址不同,这在某些情况下可能导致代码膨胀。通过实例分析和代码演示,深入解析了这一特性及其背后的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意这儿说的是“函数”不是“方法”,也就是说不带self的函数

trait Foo{
    fn foo(){
        println!("foo");
    }
}

struct Bar1;
struct Bar2;

impl Foo for Bar1{}
impl Foo for Bar2{}

fn main(){
    println!("{:p}",&Bar1::foo);
    println!("{:p}",&Bar2::foo);
}

开始以为Bar1::foo和Bar2::foo的地址是一样的,也就是同一份代码,可实际上rust为每个类型重新复制了一份代码,这个在某些时候会造成代码膨胀

Play地址:http://is.gd/IWILdR

0x7f0ab699c150
0x7f0ab699c178
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值