gpt4 book ai didi

rust - 感叹号在特征实现中意味着什么?

转载 作者:行者123 更新时间:2023-11-29 07:43:01 28 4
gpt4 key购买 nike

我在图书馆引用中找到了 std::rc::Rc这个trait implementation

impl<T> !Send for Rc<T> 
where
T: ?Sized,

Send 前面的感叹号是什么意思?

我都咨询了The Rust Programming Language ¹ 书和 The Rust Reference ²,但没有找到解释。请在您的回答中提供引用。


¹ 尤其是[section 3.19 Traits
² 和部分5.1 Traits5.1 Implementations

最佳答案

它是 Send 特征的负面特征实现,如 RFC 19 中所述。 .

总结:Send trait 是一个auto trait,这意味着它会自动为所有只包含其他Send 的类型实现类型:

unsafe auto trait Send {}

(Send 也是一个不安全的特征,这意味着实现起来是不安全的,但这与问题无关。)

auto 特征可能不定义任何方法,这也使它成为一个标记特征。 (定义自动特征的语法目前仅在标准库或夜间编译器中可用,但它们的语义是稳定的。)

要选择退出 Send 的自动实现,您必须编写一个明确的负面特征实现:

impl !Send for MyType {}

这意味着即使MyType只包含其他Send类型,MyType本身也不会自动实现Send.

另见另一个问题的答案:What is an auto trait in Rust?

关于rust - 感叹号在特征实现中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30291217/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com