打不过就加入:
C++今天已经40年,我用C++编程也已15年。虽然网上有很多看衰C++的看法,但我始终坚信C++会有它顽强的生命力。
但最近看到RUST已经在Linux转正了,所以我打算加入RUST,看看它到底有何魔力。
另外也是为了水点文章,获取"流量券"
文章目录
整型
RUST中的整型类型基本上等于C++标准<cstdint>头文件中定义的整型对应。
| 类型 | 含义 |
|---|---|
| u8 | 8bits 无符号整型 |
| i8 | 8bits 有符号整型 |
| u16 | 16bits 无符号整型 |
| i16 | 16bits 有符号整型 |
| u32 | 32bits 无符号整型 |
| i32 | 32bits 有符号整型 |
| u64 | 64bits 无符号整型 |
| i64 | 64bits 有符号整型 |
| u128 | 128bits 无符号整型 |
| i128 | 128bits 有符号整型 |
| usize | 机器字宽度的无符号整型 |
| isize | 机器字宽度的有符号整型 |
机器字宽度是CPU架构的地址位宽度,32位架构(x86,aarch32等)为32bits,64位架构(x86_64,aarch64等)为64bits。
隐式整型越界的处理
C++对整型计算时发生越界时的行为没有明确定义,而RUST做出了定义。
- 在debug版本中,整型越界会出现panic。
- 在release版本中,整型越界会用计算结果与当前类型的最大值取模。
显式整型越界的处理
Rust的标准库中提供四种整型运算方法。这些方法在debug和release版本中的行为是一致的。
| 方法 | 行为 |
|---|---|
| checked_${alg} | 返回Option类型,没越界时返回Some(v),溢出时返回None |
| wrapping_${alg} | 没越界时返回结果,越界时返回结果与可表示最大值的取模 |
| saturating_${alg} | 没越界时返回结果,越界时,如果值离最大值近返回最大值,如果值离最小值近返回最小值 |
| overflowing_${alg} | 返回(result, overflowed)。result为wrapping_${alg}的结果,overflowed为布尔值标识是否越界 |
上表中${alg} 可以是
| 标识 | 含义 |
|---|---|
| add | 加法 |
| sub | 减法 |
| mul | 乘法 |
| div | 除法 |
| rem | 去余 |
| neg | 取负 |
| abs | 取绝对值 |
| pow | 幂 |
| shl | 按位左移 |
| shr | 按位右移 |
字面量
- 在定义字面量时需要在数字后面添加类型后缀以标识数字的类型
- 数字之间可以使用
_进行分割增加可读性 - 0x、0o 和 0b前缀分别标识十六进制、八进制和二进制
如:
rust
116i8 //i8类型字面量
0xFFFF_FFFFu32 //无符号32bits字面量