与c++比较学习rust3-2:数据类型
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 | - |
注意: |
- rust 中的 isize 是指:64位架构,就使用64位,而32位架构就使用32位。(与go一样)
而在c++中,int 是32位(在有些情况下,它只是16位)。c++标准中规定是int 最起码有16位。 - 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) |
初始化方式
- c++
int a[5] = {1,2};
int a[] = {1,2,0,1,2};
int a[5]; - 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]; - 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++ 无论你怎么写,都不是拷贝