707|3

4942

帖子

12

TA的资源

版主

楼主
 

《Rust实战》结构体里的泛型,有没有老师能给我解个惑呢 [复制链接]

泛型就像多态,泛型主要目的是为程序员提供编程的便利,减少代码的臃肿,同时可以极大地丰富语言本身的表达能力,为程序员提供了一个合适的炮管。想想,一个函数,可以代替几十个,甚至数百个函数,是一件多么让人兴奋的事情。

如果引入了泛型,这里的i8,i32,f64本来都时在栈上的吧。

fn add_i8(a:i8, b:i8) -> i8 {
    a + b
}
fn add_i32(a:i32, b:i32) -> i32 {
    a + b
}
fn add_f64(a:f64, b:f64) -> f64 {
    a + b
}

fn main() {
    println!("add i8: {}", add_i8(2i8, 3i8));
    println!("add i32: {}", add_i32(20, 30));
    println!("add f64: {}", add_f64(1.23, 1.23));
}

如果要是用泛型,那么代码可以变成下面的简化形式

fn add<T>(a:T, b:T) -> T {
    a + b
}

fn main() {
    println!("add i8: {}", add(2i8, 3i8));
    println!("add i32: {}", add(20, 30));
    println!("add f64: {}", add(1.23, 1.23));
}

那么此时,数据是在堆上吗?

会不会有一个说法,简化代码写法,但是牺牲了空间和速度呢?

 

此帖出自编程基础论坛

最新回复

本帖最后由 deadash 于 2024-9-9 18:19 编辑 没有牺牲空间和速度。T可以 &ref都可以使用,甚至callback可以where 来实现trait   你可以认为相当于如果被使用了就会编译对应的函数,和C++的模板一样。   详情 回复 发表于 2024-9-9 18:16
点赞 关注
 

回复
举报

194

帖子

4

TA的资源

纯净的硅(初级)

沙发
 

我建议你去Rust官网看英文文档,这每个语言它底层实现不一样

此帖出自编程基础论坛

点评

是想准备看原文。。。。。。。一直没有开始。。    详情 回复 发表于 2024-5-21 10:42
 
 
 

回复

1390

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
御坂10032号 发表于 2024-5-20 17:53 我建议你去Rust官网看英文文档,这每个语言它底层实现不一样

是想准备看原文。。。。。。。一直没有开始。。

 

此帖出自编程基础论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

4
 
本帖最后由 deadash 于 2024-9-9 18:19 编辑

没有牺牲空间和速度。T可以 &ref都可以使用,甚至callback可以where 来实现trait

 

你可以认为相当于如果被使用了就会编译对应的函数,和C++的模板一样。

此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表