Rust踩坑日记
又是与编译器斗智斗勇的一天。
RavenRayRust
学生です
展开
-
Rust踩坑日记(三)Leetcode中的链表
Leetcode中的链表代码实现Leetcode中Rust单链表定义如下://Definition for singly-linked list.#[derive(PartialEq, Eq, Clone, Debug)]pub struct ListNode { pub val: i32, pub next: Option<Box<ListNode>>}impl ListNode { #[inline] fn new(val: i32) ->原创 2021-10-10 13:28:16 · 257 阅读 · 0 评论 -
Rust踩坑日记(二)Option,Some和None
Option,Some和NoneOption是Rust中核心的枚举类型,其提出是为了让空值得到有效的处理。任何可能为空值的结果都应被处理为Option。Option<T>的值,有Some(T)和None两种。常用的取值方法unwarp()当Some(T)调用时,能将T类型的值取出,若T未实现Copy trait,则发生所有权转移。当None调用时,若在编译阶段,会由编译器报错,无法通过编译;若在运行阶段,程序会Panic。为了防止None调用unwarp(),除了进行None检查原创 2021-10-04 23:20:47 · 2608 阅读 · 0 评论 -
Rust 踩坑日记(一)堆,栈与Box
堆与栈考虑到跟汇编语言的紧密联系,当我们谈论较底层语言的内存管理时,堆与栈(由于栈的管理是自动进行的,程序员更关心堆)是不可绕开的话题。在C语言中,堆管理依靠程序员手动释放;在Java和Python语言中,堆管理依靠垃圾回收器(GC);而在Rust语言中,堆管理依靠所有权与生命周期机制。关于增长方向在某些书上可能有明确表示,栈是向下增长的,堆是向上增长。这是不正确的。正确的说法是:栈的大小,增长方向等跟CPU体系结构,操作系统,编译器,甚至跟“上”“下”的定义都有关系,很难一概而论。在Rust中,可原创 2021-10-02 20:24:36 · 686 阅读 · 0 评论