【问题标题】:Why doesn't the compiler raise a warning when a struct member is unread?为什么当结构成员未读时编译器不发出警告?
【发布时间】:2025-11-26 21:30:01
【问题描述】:

我有这两条代码:

fn main() {
    let mut x: int = 5;
    x = 6;
    println!("value {}", x);
}  

使用此代码,编译器将发出警告:

let x: int = 5 处永远不会读取该值

但是对于下面的代码,编译器不会。

struct Point {
    x: int,
    y: int,
}
fn main() {
    let mut p = Point {x: 1i, y: 2i};
    p.x = 5;
    println!("value {}, {}", p.x, p.y);
}

为什么会这样? x = 1i 时我们从未读取过该值。相反,我们读取x = 5i 处的值。那么为什么编译器不会像之前的代码那样发出警告呢?

【问题讨论】:

    标签: struct rust unused-variables


    【解决方案1】:

    我认为发生这种情况是因为编译器只分析直接局部变量,而不是更深入地研究结构。我想完整的分析需要一个相当复杂的算法,而且几乎不需要它。

    或者它可能是编译器中的一个错误,或者更有可能是一个未实现的功能。如果您认为重要,可以向issue tracker 提交票证。

    【讨论】:

    • 不,不是错误,只是尚未实现到可以想象的最大程度。
    • 我可能没有正确表达自己。在“错误”下,我的意思是一个未实现的功能。
    最近更新 更多