我在Constructors - The Rustonomicon页中找不到这方面的任何参考.是否保证以下代码…

struct Mutates {
    n: usize,
}

impl Mutates {
    fn side_effects(&mut self) -> usize {
        self.n += 1;
        self.n
    }
}

#[derive(Debug)]
struct Struct {
    a: usize,
    b: usize,
}

fn main() {
    let mut m = Mutates { n: 0 };

    // note the order of the fields
    dbg!(Struct {
        a: m.side_effects(),
        b: m.side_effects(),
    });
    dbg!(Struct {
        b: m.side_effects(),
        a: m.side_effects(),
    });
}

…将始终打印以下内容?

[src/main.rs:22] Struct{a: m.side_effects(), b: m.side_effects(),} = Struct {
    a: 1,
    b: 2,
}
[src/main.rs:26] Struct{b: m.side_effects(), a: m.side_effects(),} = Struct {
    a: 4,
    b: 3,
}

或者编译器是否可以分配不同的值?

请注意,问题是关于字段的顺序是initialized,而不是声明.

请注意,这个问题是专门询问structs而不是元组,答案是What is the evaluation order of tuples in Rust?.

推荐答案

是的,这是保证.Ralf Jungcompiler team contributor在Zulip上确认:

是否保证 struct 字段的初始化顺序?

拉尔夫:

是的,总是按照初始值设定项中字段的写入顺序

struct 定义中字段的顺序无关紧要

screenshot

Rust相关问答推荐

是否有一种可靠的方法可以将Arc弦乐转换/转换为Arc Vec u8>>

如何优化小型固定大小数组中的搜索?

为什么我可以跟踪以前borrow 过的变量?房主在哪里?

在Rust中宏的表达式中提取对象

在跨平台应用程序中使用std::OS::Linux和std::OS::Windows

在Rust中判断编译时是否无法访问

如何实现Serde::Ser::Error的调试

我们能确定Rust会优化掉Clone()吗?如果它会立即掉落?

解析程序无法在Cargo 发布中 Select 依赖版本

Rust移动/复制涉及实际复制时进行检测

使用 select 处理 SIGINT 和子等待!无阻塞

.在 Rust 模块标识符中

Rust 文件未编译到 dll 中

如何使用 Rust Governor 为每 10 秒 10 个请求创建一个 RateLimiter?

从光标位置旋转精灵

为什么要这样编译?

如何判断服务器是否正确接收数据

使用 `clap` 在 Rust CLI 工具中设置布尔标志

SDL2 没有在终端键上触发?

第 7.4 章片段中如何定义 `thread_rng`