Rust 中的函数原型是啥?
Posted
技术标签:
【中文标题】Rust 中的函数原型是啥?【英文标题】:What is a function prototype in Rust?Rust 中的函数原型是什么? 【发布时间】:2019-06-05 14:24:57 【问题描述】:我想了解 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 上下文中是什么意思?
【问题讨论】:
我将其解释为特征声明中的函数签名,没有默认主体 更像 C 中的原型,但没有不方便的地方 ;) 【参考方案1】:但是,这似乎与上面的用法不符;每个函数定义都以函数的签名开始,因此说将属性放在签名上什么都不做是没有意义的,因为这就是您将属性放在函数上时所做的事情。
是的,每个函数都以签名开头,但并非每个签名都是函数定义的一部分。也就是说,可以有一个签名,但没有主体(例如在一个特征中),这就是您引用的文档中“原型”的含义。像这样的:
trait Foo
#[inline] // This annotation does nothing
fn foo();
【讨论】:
以上是关于Rust 中的函数原型是啥?的主要内容,如果未能解决你的问题,请参考以下文章