c - “Rust 不会将整数转换为引用”这句话是什么意思?
问题描述
在Programming Rust中的References Are Never Null部分中,他们指出没有 C 的类似物。那一点我明白了。然后他们说NULL
Rust 不会将整数转换为引用(在
unsafe
代码之外),因此您不能将零转换为引用。
此语句是否对应于无法编译的 Rust 代码?那个代码是什么?
注意这编译得很好
let i = 0;
let ri = &i;
println!("{}", i);
println!("{}", ri);
所以他们大概不会谈论这个。
注意:我认为我最初的问题在很大程度上回答了为什么地址零用于空指针?
解决方案
在运行时,引用只是一个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) };
推荐阅读
- python-3.x - 如何将二分图转换为无二分图
- jquery - 我的 Joomla 网站上最近出现的错误“Uncaught TypeError: jQuery(...).ClassyLoader is not a function”
- powershell - 选择对象或 Export-Csv 中的字符串连接
- c# - 获得“System.Net.WebException”异常
- c++ - std::mutex 是否偏爱拥有它的线程?
- bash - 在脚本中只需要 bash shell 的可靠方法
- php - 数组作为 Laravel 表单中的输入(提交功能不起作用)
- javascript - 无法在角度中找到 CSS
- powerquery - 从 power 查询中的表中获取前 n 个结果,其中 n 是基于 if 函数的动态
- sql-server - 如何找到两个连续日期之间的比率值