【发布时间】:2018-05-31 19:06:36
【问题描述】:
我有这个代码:
use std::sync::atomic::{AtomicUsize, Ordering};
const SOME_VAR: AtomicUsize = AtomicUsize::new(0);
fn main() {
println!("{}", SOME_VAR.load(Ordering::SeqCst));
println!("{}", SOME_VAR.fetch_add(10, Ordering::SeqCst));
println!("{}", SOME_VAR.load(Ordering::SeqCst));
}
这将打印0 0 0,没有任何错误。在 Java 中,我可以使用 final HashMap 并向其添加 (k, v)。在 Rust 中,我很惊讶编译器没有对我大喊大叫,也没有增加我的原子值。我在这里做错了吗?
如果我使用static:
static SOME_VAR: AtomicUsize = AtomicUsize::new(0);
我得到了结果0 0 10。为什么它不适用于const?
【问题讨论】:
-
Rust 没有任何类似于 Java 的
final的东西,因为它不支持继承并且默认情况下变量是不可变的。 Java 没有任何类似于 Rust 的const的东西,因为 Java 倾向于依赖 JVM 来优化事物,而不是进行编译时评估。 Rust 的const更像 C++ 的constexpr,Java 的final更像 C++ 的const。清如泥!
标签: rust