【发布时间】:2022-01-04 11:22:23
【问题描述】:
docs 说:
常量项是一个可选命名的常量值,它与程序中的特定内存位置无关。常量在使用时基本上都是内联的,这意味着它们在使用时会直接复制到相关上下文中。
虽然这对于整数、布尔值等“简单”值听起来完全合理,但这是否也意味着对于更复杂/更大的数据结构,例如 HashMap/BTreeMaps,consts效率会很低吗?如果是这样,为什么(在什么情况下)要对此类结构使用 const,而不是不可变的静态变量?
【问题讨论】:
-
你在如何初始化常量方面也很有限,我相信即使
HashMap::new()也不会这样做 -
您不能创建
const MAP: HashMap<...>,因为没有const fn可以构造它。 Playground - “常量中的调用仅限于常量函数、元组结构和元组变体” -
map 和 vecs 等昂贵的数据结构需要调用分配器。分配器不是 const,所以任何使用 alloc 的东西都不能是 const。
-
其实我不确定
HashMap,但BTreeMap显然工作是in progress,它已经在 Nightly 中可用。 -
太酷了!但我认为这本身并不是特别有用。你可以创建一个
const MAP: BTreeMap<...>,但它总是空的。也许在一般意义上很有用,但这并不真正适合您所询问的“复杂/更大的数据结构”。