[英]What does the exclamation point mean in a trait implementation?
我在std::rc::Rc
的库参考中找到了这个特性实现
impl<T> !Send for Rc<T>
where
T: ?Sized,
Send
前面的感叹号是什么意思?
我查阅了The Rust Programming Language ¹ book 和The Rust Reference ²,但没有找到解释。 请在您的回答中提供参考。
它是RFC 19 中描述的Send
trait 的负面 trait 实现。
总结: Send
trait 是一个auto trait ,这意味着它会自动为所有只包含其他Send
类型的类型实现:
unsafe auto trait Send {}
( Send
也是一个不安全的 trait ,这意味着实现它是不安全的,但这与问题无关。)
一个auto
trait 可能没有定义任何方法,这也使它成为一个标记 trait 。 (定义自动特征的语法目前仅在标准库或夜间编译器中可用,但它们的语义是稳定的。)
要选择退出Send
的自动实现,您必须编写一个明确的否定 trait 实现:
impl !Send for MyType {}
这意味着即使MyType
只包含Send
其他类型, MyType
本身也不会自动实现Send
。
另请参阅另一个问题的答案: Rust 中的 auto trait 是什么?
这是一个负面特征 impl ,因此您可以将其理解为选择退出Send
特征。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.