gpt4 book ai didi

rust - 无法将一元运算符 `-` 应用于类型 `usize`

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

我正在尝试编译一些较旧的 Rust 代码,在这段代码上:

const SOMETHING: *const c_char = -1 as *const c_char;

我收到这个错误:

error: cannot apply unary operator `-` to type `usize`
--> src/lib.rs:32:34
|
32 | const SOMETHING: *const c_char = -1 as *const c_char;
|

我怀疑这是因为 c_char 是无符号的并且无符号不能为负数,但我不知道如何解决它。此代码适用于一些未知的旧版本 Rust。我尝试将 c_char 更改为 i8 只是为了好玩,但没有奏效。

最佳答案

指针对象的类型无关紧要。当您将整数转换为指针时,Rust 推断该整数必须是 usize,因为它是唯一的类型(除了 isize,尽管它不经常使用)保证与指针具有相同的大小。

事实上,在 Rust 中,一元否定运算符不再可用于无符号整数类型。相反,您应该使用按位非运算符(写成 !,而不是 C 语言中的 ~)。

在二进制补码中,这两个运算符之间存在直接等价关系:!x == -(x + 1)。具体来说,-1 的等效项是 !0。因此,你可以这样写:

const SOMETHING: *const c_char = !0 as *const c_char;

关于rust - 无法将一元运算符 `-` 应用于类型 `usize`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44424540/

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