请参考下面的代码,对于被注释掉的行。它不能被 Rust 编译器编译,这意味着我们需要为 Rust 中的原始指针显式指定像 *const i32
这样的常量。但是对于对其指针对象不可变的引用,我们不需要像使用原始指针那样显式指定常量。那么,为什么 Rust 不使用更对称的方式来表达引用和原始指针的相同含义,因为引用实际上是引擎盖下的指针?
fn main() {
let x1: &i32;
let x2: &mut i32;
// let p1: *i32; // This line doesn't compile!!!
let p1: *const i32; // we need to specify the constness explicitly.
let p2: *mut i32;
}
答案 0 :(得分:5)
Rust 的早期版本(1.0 之前)使用 docker run -v /mnt/app/files/Images/vehicle:/YOUR_LOCAL_PATH imageName
表示 *T
原始指针(与您注意的相同语法今天不起作用)。 RFC 0068 将 const
重命名为 *T
,理由是在从现有 C 代码转录类型签名时使用 *const T
更容易出错:
Rust 不安全指针类型与 C 指针类型的当前差异被证明太容易出错,无法在未来实际启用这些优化。通过重命名 Rust 的不安全指针以与其 C 兄弟紧密匹配,错误转录签名的可能性降低了。
RFC 还指出(正如您所做的那样)这会导致引用和原始指针之间的命名不一致:
<块引用>今天的不安全指针设计与 Rust 中的借用指针类型一致,对可变指针使用 *T
限定符,对“不可变”指针使用无限定符。重命名指针将与这种一致性背道而驰,并且还会引入一个未在语言其他地方使用的关键字 mut
。