从Rust 1.6开始,当前的特征Default定义为,
pub trait Default {
fn default() -> Self;
}为什么这不是
pub trait Default {
const fn default() -> Self;
}发布于 2022-06-01 20:49:49
锈蚀的硬限制
这是因为目前
error[E0379]: functions in traits cannot be declared const
--> src/main.rs:15:2
|
15 | const fn default() -> Self {
| ^^^^^ functions in traits cannot be const我是正在开发GitHub #63065。当特征中的函数可以声明为const时,也许会有更好的解决方案。
发布于 2022-06-03 00:33:39
有许多实现Default::default的方法不是const。例如:
use rand;
struct MyStruct {
v: u32
}
impl Default for MyStruct {
fn default() -> Self {
Self {
// RNG will never be const!
v: rand::random()
}
}
}设计较少的示例包括引用全局变量,例如克隆某些全局默认配置的Arc。
更改Deafult::default,即使在rustc中支持,也将是不可接受的破坏性更改,而且可以说是不受欢迎的。
https://stackoverflow.com/questions/72467891
复制相似问题