当前位置: 首页 > news >正文

Rust 初体验6

学习 Rust 的同学,大概都有其他语言的背景。仔细分辨与已有知识的差别,或有助于更好地理解Rust。以下是把 C 语言与 Rust 作一初步对比,以见出其中差别。

1.变量声明

C语言使用intfloat等关键字来声明变量的类型,而Rust则使用类型推断,无需显式声明变量类型。

  • 示例(C语言):
int x = 5;
float y = 3.14;
  • 示例(Rust):
let x = 5;
let y = 3.14;

2.函数定义

C语言使用return关键字返回函数结果,而Rust则使用隐式返回值。

  • 示例(C语言):
int add(int a, int b) {return a + b;
}
  • 示例(Rust):
fn add(a: i32, b: i32) -> i32 {a + b
}

3.内存管理

C语言需要手动分配和释放内存,而Rust通过所有权系统自动管理内存。

  • 示例(C语言):
int* create_array(int size) {int* arr = malloc(size * sizeof(int));return arr;
}
  • 示例(Rust):
fn create_array(size: usize) -> Vec<i32> {vec![0; size]
}

4.错误处理

C语言通常使用返回值和全局变量来表示错误状态,而Rust使用Result枚举、Option枚举进行错误处理。

  • 示例(C语言):
int divide(int a, int b) {if (b == 0) {return -1; // 错误状态}return a / b;
}
  • 示例(Rust):
fn divide(a: i32, b: i32) -> Result<i32, &'static str> {if b == 0 {Err("Division by zero")} else {Ok(a / b)}
}

5.循环语句

for循环:C语言使用for关键字进行循环,可以指定初始值、条件和增量。Rust也使用for关键字进行循环,但语法略有不同,通常用于迭代集合或范围。

  • 示例(C语言):
for (int i = 0; i < 5; i++) {printf("%d\n", i);
}
  • 示例(Rust):
for i in 0..5 {println!("{}", i);
}

while循环:C语言使用while关键字进行循环,只要条件为真就会继续执行循环体。Rust也使用while关键字进行循环,与C语言的用法相同。

  • 示例(C语言):
int i = 0;
while (i < 5) {printf("%d\n", i);i++;
}
  • 示例(Rust):
let mut i = 0;
while i < 5 {println!("{}", i);i += 1;
}

注意:Rust 语言的 for、while 循环语句中的条件语句不用加括号。

do-while循环:C语言使用do-while循环,先执行循环体,然后检查条件是否为真。Rust没有内置的do-while循环,但可以通过其他方式实现类似的效果。

  • 示例(C语言):
int i = 0;
do {printf("%d\n", i);i++;
} while (i < 5);
  • 示例(Rust):
let mut i = 0;
loop {println!("{}", i);i += 1;if i >= 5 {break;}
}

相关文章:

  • phpstrom创建thinkphp项目
  • 【Webpack】处理 js 资源
  • C++运算符重载(日期类的运算符重载为例)
  • js---webAPI
  • 原型设计模式
  • 工作心得——css让元素居中的方法
  • 嵌入式linux驱动开发篇之设备树
  • php 数组函数
  • 关于jupyter的一些小笔记
  • Linux第48步_编译正点原子的出厂Linux内核源码
  • 【精选】Java面向对象进阶——接口细节:成员特点和接口的各种关系
  • 随想录刷题笔记 —二叉树篇7 617合并二叉树 700二叉搜索树中的搜索 98验证二叉搜索树
  • C++数据结构与算法——双指针法
  • python-使用ffmpeg批量修改文件的后缀名
  • vue自定义指令(图文示例)
  • 【EOS】Cleos基础
  • 08.Android之View事件问题
  • C++入门教程(10):for 语句
  • express如何解决request entity too large问题
  • Linux CTF 逆向入门
  • python 装饰器(一)
  • Vue2.0 实现互斥
  • 缓存与缓冲
  • 记一次和乔布斯合作最难忘的经历
  • 简单基于spring的redis配置(单机和集群模式)
  • 聊聊flink的BlobWriter
  • 找一份好的前端工作,起点很重要
  • 交换综合实验一
  • ​第20课 在Android Native开发中加入新的C++类
  • #QT项目实战(天气预报)
  • #Ubuntu(修改root信息)
  • $.proxy和$.extend
  • (2022 CVPR) Unbiased Teacher v2
  • (9)STL算法之逆转旋转
  • (C++17) optional的使用
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (五)c52学习之旅-静态数码管
  • (转)http协议
  • (转)德国人的记事本
  • .Family_物联网
  • .Net 4.0并行库实用性演练
  • .NET 4.0中的泛型协变和反变
  • .NET Core跨平台微服务学习资源
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET6实现破解Modbus poll点表配置文件
  • /var/lib/dpkg/lock 锁定问题
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [1204 寻找子串位置] 解题报告
  • [20150707]外部表与rowid.txt
  • [AIGC] Redis基础命令集详细介绍
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)