簡體   English   中英

感嘆號在 trait 實現中是什么意思?

[英]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 ²,但沒有找到解釋。 請在您的回答中提供參考。


¹尤其是 [第3.19特征
²5.1 特性5.1 實現部分

它是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM