繁体   English   中英

当引用不需要时,为什么原始指针需要 const 关键字?

[英]Why do raw pointers need the const keyword when references don't?

请参考下面的代码,以获取已注释掉的行。 它不能被 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;
}

Rust(1.0 之前)的早期版本使用*T表示const原始指针(与您注意到的语法相同,今天不起作用)。 RFC 0068*T重命名为*const T ,理由是在从现有 C 代码转录类型签名时使用*T更容易出错:

Rust 不安全指针类型与 C 指针类型的当前差异被证明太容易出错,无法在未来实际启用这些优化。 通过重命名 Rust 的不安全指针以紧密匹配它们的 C 兄弟,错误转录签名的可能性降低了。

RFC 还指出(正如您所做的那样),这会导致引用和原始指针之间的命名不一致:

今天的不安全指针设计与 Rust 中的借用指针类型一致,对可变指针使用mut限定符,对“不可变”指针使用没有限定符。 重命名指针会偏离这种一致性,并且还会引入一个在语言中其他地方没有使用的关键字const

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM