我无法找到文档中提到的!Unpin
的文档。
更一般地说,!
操作符似乎缺乏与特征相关的文档。具体来说,它似乎代表Not
在Not Unpin
或Not Unpinable
在这种情况下。我想这是不同于Pin
在某些方面,否则它将是多余的。目前,搜索文档是具有挑战性的,因为!
经常出现。
如果!
在性状上的操作符行为能包含在附录B:文档的操作符和符号中就好了。
Unpin
是几个自动特征之一,它对任何与它兼容的类型自动实现。在Unpin
的情况下,这基本上是所有的类型。
Auto-traits(以及onlyAuto-traits)可以通过在trait名前面加上!
来实现否定的实现。
// By default, A implements Unpin
struct A {}
// But wait! Don't do that! I know something you don't, compiler.
impl !Unpin for A {}
Unpin
,特别地,向Rust表明将实现类型T
的值移出Pin
是安全的。正常情况下,Pin
表示不能移动里面的东西。Unpin
则相反,它说"我知道我们只是固定了这个值,但是我,作为这个类型的作者,知道无论如何移动它都是安全的"。
一般来说,Safe Rust中的任何内容都是Unpin
。你唯一想要标记为!Unpin
的时候是如果它与另一种语言(如C)中的东西接口,如果你有一个数据类型,你在C中存储指针,例如,那么C代码可能是在假设数据永远不会改变地址的情况下编写的。在这种情况下,您会想要否定Unpin
的实现。