首页 > 解决方案 > “Rust 不会将整数转换为引用”这句话是什么意思?

问题描述

Programming Rust中的References Are Never Null部分中,他们指出没有 C 的类似物。那一点我明白了。然后他们说NULL

Rust 不会将整数转换为引用(在unsafe代码之外),因此您不能将零转换为引用。

此语句是否对应于无法编译的 Rust 代码?那个代码是什么?

注意这编译得很好

let i = 0;
let ri = &i;
println!("{}", i);
println!("{}", ri);

所以他们大概不会谈论这个。

注意:我认为我最初的问题在很大程度上回答了为什么地址零用于空指针?

标签: cnullrust

解决方案


在运行时,引用只是一个usize,表示内存中某些数据的地址。这本书试图说的是,你不能取一个整数,然后把它当作一个地址,然后尝试获取那里保存的数据。例如,这会失败:

let an_integer: usize = 12345;
let some_value: &bool = an_integer;

使用unsafe代码,您可以这样做:

let an_integer: usize = 12345;
// Very dangerous: transmute unsafely converts between any two types as long as they are the same size:
let some_value: &bool = unsafe { std::mem::transmute(an_integer) };
// Less dangerous, but still dangerous:
let some_value: &bool = unsafe { &*(an_integer as *const bool) };


推荐阅读