Rust 中的“*const()”到底是什么?

YHS*_*SPY 6 rust

那么,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)

Iva*_*n C 6

*const ()const* void确实与 C 非常相似,不同之处在于它仅()表示一个值,而void没有表示任何值。关于()和的区别的相关回答void

如果是这样,为什么它不支持指向浮点数?

它确实如此,只是foo as *const ()与指向浮点数无关,它与获取一个值并将其转换为具有相同数值的指针有关,这对浮点数没有意义。