那么,Rust 中的“*const()”究竟是什么?似乎我可以在 Rust 中为这种类型“作为”一些原始值(整数值、函数),如下所示:
let foo = 1;
let pointer = foo as *const (); // this works.
Run Code Online (Sandbox Code Playgroud)
但是对于浮点数等,编译器不允许我们做上述的强制转换,那么 Rust 中的“*const()”是什么?它与void*
C/C++ 中的类似吗?如果是这样,为什么它不支持指向浮点数?
顺便说一句,在参考中添加了当前使用此模式的情况: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);
Run Code Online (Sandbox Code Playgroud)
*const ()
const* void
确实与 C 非常相似,不同之处在于它仅()
表示一个值,而void
没有表示任何值。关于()
和的区别的相关回答void
如果是这样,为什么它不支持指向浮点数?
它确实如此,只是foo as *const ()
与指向浮点数无关,它与获取一个值并将其转换为具有相同数值的指针有关,这对浮点数没有意义。