函数指针类型
语法
裸函数类型 :
ForLifetimes? FunctionTypeQualifiersfn
(FunctionParametersMaybeNamedVariadic?)BareFunctionReturnType?函数类型限定符:
unsafe? (externAbi?)?裸函数返回类型:
->TypeNoBounds可能带命名或可变参数的函数参数 :
MaybeNamedFunctionParameters | MaybeNamedFunctionParametersVariadic可能带命名参数的函数参数 :
MaybeNamedParam (,MaybeNamedParam )*,?可能带命名参数 :
OuterAttribute* ( ( IDENTIFIER |_):)? Type可能带命名参数和可变参数的函数参数 :
( MaybeNamedParam,)* MaybeNamedParam,OuterAttribute*...
函数指针类型,使用 fn 关键字编写,指的是一个其身份在编译时不必确定的函数。
Binop 被定义为函数指针类型的示例
#![allow(unused)] fn main() { fn add(x: i32, y: i32) -> i32 { x + y } let mut x = add(5,7); type Binop = fn(i32, i32) -> i32; let bo: Binop = add; x = bo(5,7); }
函数指针可以通过 函数项 以及不捕获变量、非异步的 闭包 的强制类型转换来创建。
unsafe 限定符表示该类型的值是一个 unsafe 函数,而 extern 限定符表示它是一个 extern 函数。
可变参数只能用于具有 "C" 或 "cdecl" 调用约定的 extern 函数类型。
这也包括相应的 -unwind 变体。
函数指针参数上的属性
函数指针参数上的属性遵循与 常规函数参数 相同的规则和限制。