gpt4 book ai didi

rust - 我可以在 Rust 中将 const 与重载运算符一起使用吗?

转载 作者:行者123 更新时间:2023-11-29 08:07:46 25 4
gpt4 key购买 nike

在这段代码中:

#![allow(dead_code)]
use std::ops::Add;
struct Foo(i32);

const X: i32 = 1;
const Y: i32 = X + X;
const A: Foo = Foo(1);
const B: Foo = A + A;

impl Add for Foo {
type Output = Foo;
fn add(self, rhs: Foo) -> Foo {
Foo(self.0 + rhs.0)
}
}

编译器说:

error[E0015]: calls in constants are limited to struct and enum constructors
--> src/main.rs:8:16
|
8 | const B: Foo = A + A;
| ^^^^^
|
note: a limited form of compile-time function evaluation is available on a nightly compiler via `const fn`
--> src/main.rs:8:16
|
8 | const B: Foo = A + A;
| ^^^^^

什么是最好的替代品?

最佳答案

不,你不能。也就是说,add 的实现实际上可以做 Rust 可以做的任何,包括 panic 、打印输出、读取文件、分配内存等。

您需要“手动”构建常量:

const B: Foo = Foo(2);

您还可以使用 build script这将生成 Rust 代码,然后您可以将其包含回您的程序中。


如错误信息所述:

note: a limited form of compile-time function evaluation is available on a nightly compiler via const fn

但是,这对您现在和现在都没有帮助,因为目前无法将特征方法设为 const,而且我怀疑 Add::add(或任何其他运算符trait) 将被标记为 const,因为这会过于严格——阻止 Add 的实现使用上面列出的所有功能。我不知道特化/子类型化如何与 const 函数一起工作。

关于rust - 我可以在 Rust 中将 const 与重载运算符一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43984358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com