我想了解Rust中#[inline]
属性的行为,因此我正在阅读the Attributes section of The Rust Reference。这很有帮助,但是我发现描述的这一部分令人困惑(强调我的意思):
inline
属性向编译器建议,应将属性函数的副本放置在调用方中,而不是生成代码以在定义的地方调用该函数。此属性可用于函数和函数原型,尽管它对函数原型没有任何作用。
对于#[cold]
属性重复此警告。
我从未听说过与Rust相关的“功能原型”一词。我知道JavaScript中存在这样的概念,但是JavaScript和Rust的对象和类型系统非常不同!这是什么意思?
进一步搜索,发现在the Error Index中提到了两个函数原型:
E0034
编译器不知道要调用哪种方法,因为不止一种方法具有相同的原型。
E0580
main
函数的声明不正确。main
函数原型永远不要带参数。
在这种情况下,“函数原型”似乎表示“函数签名”之类的东西-组成函数外部接口的名称,参数和类型。这也似乎是what it means in the context of C/C++。但是,这似乎与上面的用法不符;每个函数定义都以函数的签名开头,因此说将属性放在签名上没有任何意义,因为这是将属性放在函数上时要做的事。
在Rust中,“功能原型”一词是什么意思?
答案 0 :(得分:10)
但是,这似乎与上面的用法不符;每个函数定义都以函数的签名开头,因此说将属性放在签名上没有任何意义,因为这是将属性放在函数上时要做的事。
是的,每个函数都以签名开头,但并非每个签名都是函数定义的一部分。也就是说,可以有一个签名,但是没有任何主体(例如特征),这就是您引用的文档中“原型”的含义。像这样:
trait Foo {
#[inline] // This annotation does nothing
fn foo();
}