为什么ParseBoolError会有_priv字段:
pub struct ParseBoolError {
_priv: (),
}
Run Code Online (Sandbox Code Playgroud)
我不认为该_priv领域被使用。
我找到了四种不同的方法来创建struct没有数据:
struct A{} // empty struct / empty braced struct
Run Code Online (Sandbox Code Playgroud)struct B(); // empty tuple struct
Run Code Online (Sandbox Code Playgroud)struct C(()); // unit-valued tuple struct
Run Code Online (Sandbox Code Playgroud)struct D; // unit struct
Run Code Online (Sandbox Code Playgroud)(我将离开任意嵌套的元组,其中只包含()s和单变量enum声明,因为我理解为什么不应该使用这些元组).
这四个声明之间有什么区别?我会将它们用于特定目的,还是可以互换?
这本书和参考书令人惊讶地无益.我发现这个接受RFC(clarified_adt_kinds),其进入的差异位,即单元结构也声明了一个恒定值D和元组结构也声明构造函数B()和C(_: ()).但是,它没有提供关于使用哪个的设计指南.
我的猜测是,当我导出它们时pub,实际上可以在我的模块之外构造哪些类型存在差异,但我没有找到关于它的确凿文档.
给定一个结构:
#[repr(C)]
pub struct User {
pub name: *const c_char,
pub age: u8,
pub ctx: ??,
}
Run Code Online (Sandbox Code Playgroud)
该字段ctx只能由C代码操作;它是C结构的指针UserAttr。
根据Rust FFI文档,该选择将定义为不透明类型pub enum UserAttr {}。但是,我发现Rust无法复制其值,例如,为什么对象的地址在方法之间会发生变化。
在Rust中定义这样一个不透明指针的正确方法是什么,以使它的值(作为指针)跨方法复制?