Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 是否可以在常量项中创建一个框?_Rust - Fatal编程技术网

Rust 是否可以在常量项中创建一个框?

Rust 是否可以在常量项中创建一个框?,rust,Rust,我试过这样的方法: const b: Box<i32> = Box::new(5); const b:Box=Box::new(5); 这让我知道常量中的函数调用仅限于struct和enum构造函数 我也试过了 const b: Box<i32> = box 5; const b:Box=Box 5; 这给了我一个错误,说我应该使用Box::new。有没有办法做到这一点?我需要一个盒子,因为它在一个结构中,而这个结构需要一个盒子 编辑: 我知道Box::new是一

我试过这样的方法:

const b: Box<i32> = Box::new(5);
const b:Box=Box::new(5);
这让我知道常量中的函数调用仅限于struct和enum构造函数

我也试过了

const b: Box<i32> = box 5;
const b:Box=Box 5;
这给了我一个错误,说我应该使用
Box::new
。有没有办法做到这一点?我需要一个盒子,因为它在一个结构中,而这个结构需要一个盒子

编辑:
我知道
Box::new
是一个函数,我不能在
const
项中使用它。但是有没有其他方法可以创建一个允许的框呢?

正如本书的章节所说:

const和static都需要给它们一个值。他们 只能给定一个常量表达式的值。换句话说 换句话说,您不能使用函数调用的结果或任何东西 同样复杂或在运行时

Box::new()
是一个函数,因此它属于初始化常量时无法执行的操作范围。
您可以寻找一种在运行时初始化静态变量的方法。

不是现在,不是在不久的将来

正如@Paolo提到的,初始化
const
变量的唯一方法是使用常量表达式。今天,在stable中,它仅限于一组受限的操作(一些整数操作,一些强制转换,…)

有一个RFC扩展常量表达式中可用的表达式集:。它是关于允许函数(自由函数和方法)被标记为
const
,使它们在常量表达式中可用

跟踪问题是,
const fn
可以在夜间与
#一起使用![功能(const_fn)]
板条箱属性

。。。然而,目前,
const fn
也主要涉及积分运算。据我所知,没有扩展到任意(无副作用)表达式的计划,因此它不适用于
Box::new



目前,建议您使用,它将不允许项目为
const
(它将在首次使用时初始化)。

我知道
Box::new
是一个函数,我不能在
const
项目中使用它。但是有没有其他方法可以创建一个允许的框呢?这正是我想问的,我不知道。但是有一种方法可以创建一个静态文件,并在以后初始化它(如果您选择的话,可以使用一个框)。它需要一些小心的不安全代码,或者使用像lazy static提供的宏一样的宏。@AlexKnauth否。创建
需要分配内存,这在编译时是无法完成的。编译器如何知道在未来某个时间点可以在任意计算机上分配哪些内存?但根据文档,常量项可以包含指针,只要它们也是它可以控制的常量项。所以这似乎是可能的,除非我误解了。在第一次使用时对它进行初始化是否会阻止它不可变?@AlexKnauth:它可以是不可变的,但不能是
const
,据我所知,它不能存储在只读内存中。我已经包含了一个指向lazy static板条箱的链接,第一页上的示例显示了不可变的数据(
static ref HASHMAP:HASHMAP)