enum定义时可以使用#[repr(Int)]修饰,Int就是Rust的整数类型(u8, isize这种)。对于C风格enum和没有变体的enum,repr定义了其需要使用对应整数类型的ABI(大小,对其和调用时的转换)。#[repr(C)]目前只是让Rust编译器尝试对enum选用C编译器使用的各种整型。 此RFC规定了两种兼容C语言的enum内存布局。 在非C风格的...
1、结构体(Struct) 2、枚举(Enum) 四、其他数据类型 1、切片(Slice) 2、Option类型 3、Result类型 总结 导言 Rust是一种现代的、安全的系统编程语言,注重内存安全和并发性。在Rust中,数据类型是程序中最基本的构建块之一。本篇博客将详细解释Rust的各种数据类型,并提供相关代码示例。 一、基本数据类型 Rust的基...
2、枚举(Enum) 枚举是一种自定义的数据类型,它可以表示多个可能的值。枚举使用enum关键字定义,并可以包含不同的变体(variant)。 以下是一个枚举的示例: 代码语言:javascript 复制 enumFruit{Apple,Banana,Orange,}fnmain(){letfruit:Fruit=Fruit::Apple;match fruit{Fruit::Apple=>println!("It's an apple!")...
std::mem::size_of::<SimpleVec<i32>>() ); println!( "Option类型占的内存空间为:{}字节", std::mem::size_of::<Option>() ); } Vec!类型占的内存空间为:24字节 Option类型占的内存空间为:16字节 但是对于enum类型, 会有一个tag字段,uint64,来标记变体,是None值还是Some值 struct Option { uint...
聊一聊Rust的enum enum在实际编程中是非常常用的,enum的目的就是为了清晰定义出散落在系统各个角落的相同概念的有限固定值。 一、enum介绍 如果是简单定义固定值,我们可以使用常量const。比如 1 publicconstintMAX_THREAD_COUNT=100; 在C语言中,我们可以这样定义一个枚举方便各处使用,比如:...
(mem::size_of::<Example3>(), mem::size_of::<u16>()); 枚举类enum的C内存布局 突破“枚举”字面含义的束缚,Rust的创新使Rust enum与传统计算机语言中的同类项都不同。Rust枚举类 既包括:C风格的“轻装”枚举 — 仅标记状态,却不记录细节数据。 也支持:Rust风格的“重装”枚举 — 标记状态的同时也...
enum HTTPStatus { Ok = 200, NotFound = 404, } 示例中,最大变体值为 404 ,在内存中至少需要 2 个字节来存储,因此枚举的每个变体都占用 2 字节。 在下一个示例中,枚举有 3 个变体: enum Data { Empty, Number(i32), Array(Vec<i32>), ...
// 当指定值的时候,值必须是 isize 类型enum Color { R = 125, G = 223, B, } fn main() { println!("R = {}", Color::R as u8); println!("G = {}", Color::G as u8); println!("B = {}", Color::B as u8); /* R = 125 G = 223 B = 224 */ }枚举的成员 B 没...
enumHTTPStatus { Ok, NotFound, } 对于C-style enum,在内存中,rust会根据该enum中最大的数来选择内存占用最小的int来存储,此例中没有指定就会默认Ok为0,NotFound为1,Rust选择占用1 byte的i8来存储enum。 同时,每个Enum的整数值是可以指定的,例如: ...
因此,在Rust中,上面的enum在反编译视角看到的内容是,通过u8类型的discriminant值来表示当前enum类型指向的实际类型。 // DummyEnum { // is_a_or_b: u8, // data: usize, // } 看这样一段代码: enum Name{ A(String), B(String) } fn main() { ...