首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Default::default()不是一个常量函数?

为什么Default::default()不是一个常量函数?
EN

Stack Overflow用户
提问于 2022-06-01 20:49:49
回答 2查看 197关注 0票数 2

从Rust 1.6开始,当前的特征Default定义为,

代码语言:javascript
复制
pub trait Default {
    fn default() -> Self;
}

为什么这不是

代码语言:javascript
复制
pub trait Default {
    const fn default() -> Self;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-01 20:49:49

锈蚀的硬限制

这是因为目前

代码语言:javascript
复制
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时,也许会有更好的解决方案。

  • 如果您想知道如何解决这个问题,现在请参阅
票数 2
EN

Stack Overflow用户

发布于 2022-06-03 00:33:39

有许多实现Default::default的方法不是const。例如:

代码语言:javascript
复制
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中支持,也将是不可接受的破坏性更改,而且可以说是不受欢迎的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72467891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档