【发布时间】:2021-04-13 14:36:09
【问题描述】:
那么,Rust 中的“*const ()”到底是什么?似乎我可以在 Rust 中将一些原始值(整数值、函数)“作为”这种类型,如下所示:
let foo = 1;
let pointer = foo as *const (); // this works.
但是对于浮点数等等,编译器不允许我们做上面的强制,那么Rust中的“*const()”是什么?是否类似于 C/C++ 中的void*?如果是这样,为什么它不支持指向浮点数?
顺便说一句,添加当前在参考中使用此模式的情况:https://doc.rust-lang.org/std/mem/fn.transmute.html。
fn foo() -> i32 {
0
}
let pointer = foo as *const (); // here it is!!!
let function = unsafe {
std::mem::transmute::<*const (), fn() -> i32>(pointer)
};
assert_eq!(function(), 0);
【问题讨论】:
-
@eggyal 这不是我要找的。我的好奇心是关于“指向单位值的原始指针”,因为单位值在 Rust 中有点无用且微不足道,所以我想知道我们可以在什么样的场景中使用这种模式。
-
@eggyal 我明白了,为什么浮动不能这样有点奇怪。
-
为什么?内存地址是整数。
3.141 as *const ()代表什么内存地址? -
@eggyal,你是对的,对不起,与参考演员混淆。这里我们使用的是值本身。
标签: rust