没有合适的资源?快使用搜索试试~ 我知道了~
包含:高级特性、宏、高级函数、闭包和一个简单项目代码
资源推荐
资源详情
资源评论




















19 高级特性
19.1-Unsafe Rust
fn main() {
let mut num = 5;
let r1 = &num as *const i32;
let r2 = &mut num as *mut i32;
unsafe {
println!("r1: {}", *r1);
println!("r2: {}", *r2);
}
}
输出:
r1: 5
r2: 5
fn main() {
let address = 0 * 012345usize;
let r = address as *const i32;
unsafe {
println!("r1: {}", *r);

}
}
输出:
Segmentation fault (core dumped)
unsafe fn dangerous() {}
fn main() {
unsafe {
dangerous();
}
}
//有错代码
use core::slice;
fn split_at_mut(slice: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) {
let len = slice.len();
assert!(mid <= len);
(&mut slice[..mid], &mut slice[mid..])
//上面一行中第二个slice有error: second mutable borrow occurs here
}
fn main() {
let mut v = vec![1, 2, 3, 4, 5, 6];
let r = &mut v[..];
let (a, b) = r.split_at_mut(3);
assert_eq!(a, &mut [1, 2, 3]);
assert_eq!(b, &mut [4, 5, 6]);
}
//没错代码1
use core::slice;
fn split_at_mut(slice: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) {
let len = slice.len();
let ptr = slice.as_mut_ptr();
assert!(mid <= len);
unsafe {
(

slice::from_raw_parts_mut(ptr, mid),
slice::from_raw_parts_mut(ptr.add(mid), len - mid),
)
}
}
fn main() {
let mut v = vec![1, 2, 3, 4, 5, 6];
let r = &mut v[..];
let (a, b) = r.split_at_mut(3);
assert_eq!(a, &mut [1, 2, 3]);
assert_eq!(b, &mut [4, 5, 6]);
}
//没错代码2
use core::slice;
fn split_at_mut(slice: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) {
let len = slice.len();
let ptr = slice.as_mut_ptr();
assert!(mid <= len);
unsafe {
(
slice::from_raw_parts_mut(ptr, mid),
slice::from_raw_parts_mut(ptr.add(mid), len - mid),
)
}
}
fn main() {
let address = 0x012345usize;
let r = address as *mut i32;
let slice: &[i32] = unsafe { slice::from_raw_parts_mut(r, 10000) };
}
extern "C" {
fn abs(input: i32) -> i32;
}
fn main() {
unsafe {
println!("Absolute value of -3 according to C: {}", abs(-3));

}
}
输出:
Absolute value of -3 according to C: 3
//从C语言中调用接口函数:
#[no_mangle]
pub extern "C" fn call_from_c() {
println!("Just called a Rust function from C!");
}
fn main() {}
static HELLO_WORLD: &str = "Hello, world!";
fn main() {
println!("name is: {}", HELLO_WORLD);
}
static mut COUNTER: u32 = 0;
fn add_to_count(inc: u32) {
unsafe {
COUNTER += inc;
}
}
fn main() {
add_to_count(3);
unsafe {
println!("COUNTER: {}", COUNTER);
}
}
// 输出:
// COUNTER: 3
unsafe trait Foo {
//methods go here
}

19.2-高级 Trait
unsafe impl Foo for i32 {
//method implementations go here
}
fn main() {}
pub trait Iterator {
type Item;
fn next(&mut self) -> Option<Self::Item>;
}
fn main() {
println!("Hello, world!");
}
//泛型与关联类型
pub trait Iterator {
type Item;
fn next(&mut self) -> Option<Self::Item>;
}
pub trait Iterator2<T> {
fn next(&mut self) -> Option<T>;
}
struct Counter {}
impl Iterator for Counter {
type Item = u32;
fn next(&mut self) -> Option<Self::Item> {
None
}
}
impl Iterator2<String> for Counter {
fn next(&mut self) -> Option<String> {
None
}
}
impl Iterator2<u32> for Counter {
剩余36页未读,继续阅读
资源评论


alankuo
- 粉丝: 7497
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 电力系统综合自动化系统.doc
- Cultural-Change-using-Docker.pptx
- (源码)基于mbed开发框架的Nucleo蓝牙模块温湿度控制系统.zip
- 模拟电路课件(计算机专业)6-电子电路-12概要.ppt
- 在计算机教学中激发学生创造力的方法研究.docx
- 单片机的电子密码锁的方案设计大学课程方案设计.doc
- 最新互联网区块链科技商业创业计划书PPTppt模板:.pptx
- 计算机取证技术的研究与探讨.docx
- 移动互联网企业-谷歌.docx
- 电力自动化系统中电子信息技术的有效运用分析.docx
- 配网自动化运行管理中的问题分析与对策.docx
- (源码)基于Python和PyTorch的烂番茄电影情感分类项目.zip
- jsp新闻发布系统设计方案参考文档.doc
- 网络程序开发基础知识.ppt
- 金蝶WebService总账接口说明.doc
- 互联网思维下县级融媒体中心建设创新研究.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
