[英]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.