感叹号在特质实施中意味着什么?

时间:2015-05-17 19:28:32

标签: rust traits

我在图书馆中找到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

2 个答案:

答案 0 :(得分:10)

Activity中描述Send特征的消极特质实施

总结:Send特质是不安全的特质。 RFC说:

  实施它是不安全的,因为实施它会带来语义保证,如果受到损害,会深深地威胁到内存安全。

默认情况下实施所有类型:

unsafe impl Send for .. { }

注意..作为默认实现的语法。特征也必须没有定义任何方法。默认实现是由所有类型实现的标记特征。

因此,要选择退出Send,请写下负面特质实施:

impl !Send for MyType { }

答案 1 :(得分:7)

这是negative trait impl,因此您可以将其视为选择退出Send特征。