与c++比较学习rust3-2:数据类型

发布时间 2023-11-04 19:09:57作者: 传说中的水牛

rust 的文章在 数据类型

数据类型

标量类型

整形,浮点型,布尔型,字符

整形

c++ rust go
int8_t i8 int8
int16_t i16 int16
int32_t i32 int32
int64_t i64 int64
- i128 -
int isize int
unsigned int usize uint
uint8_t u8 uint8
uint16_t u16 uint16
uint32_t u32 uint32
uint64_t u64 uint64
- u128 -
注意:
  1. rust 中的 isize 是指:64位架构,就使用64位,而32位架构就使用32位。(与go一样)
    而在c++中,int 是32位(在有些情况下,它只是16位)。c++标准中规定是int 最起码有16位。
  2. rust 中的整形溢出在debug版会报panic,release版则不会。(这真是好东西)

浮点数

c++ rust go
float f32 float32
double f64 float64

布尔值

三者基本上没啥区别

字符

| c++ | rust | go |
|8位| 32位 | 8位|
注:rust 中字符跟 go 的rune 相似

复合类型

元组

c++ rust go
tuple<int,string> a let a :(i32,char,f32) = (46,'a',5.2) -
get<0>(a) a.0 -
get<1>(a) a.1 -
注:rust 中也可以 let a = (46,'a',5.2) 初始化

数组

c++ rust go
int a[] = {1,2}; let a = [1,2,3]; a:= []int
- a.len() len(a)
for(auto v : a) for val in a.iter() for _,v := range(a)

初始化方式

  1. c++
    int a[5] = {1,2};
    int a[] = {1,2,0,1,2};
    int a[5];
  2. rust
    let a = [1,2,3];
    let a:[i32;5] = [1,2,3,4,5];
    let a = [3;5]; ==> 等价与 let a=[3,3,3,3,3];
  3. go
    var a [3]int = {1,2,3}
    a := [...]int{1,2,3}
    a := [3]int{1,2,3}
    a := [...]int

注:rust/go 中 访问不存在下标会报panic
c++ : 呵呵呵

数组作为函数参数

rust/go 都可以值传递(即全拷贝)
c++ 无论你怎么写,都不是拷贝