函数指针类型
语法
BareFunctionType :
ForLifetimes? FunctionTypeQualifiersfn
(
FunctionParametersMaybeNamedVariadic?)
BareFunctionReturnType?FunctionTypeQualifiers:
unsafe
? (extern
Abi?)?BareFunctionReturnType:
->
TypeNoBoundsFunctionParametersMaybeNamedVariadic :
MaybeNamedFunctionParameters | MaybeNamedFunctionParametersVariadicMaybeNamedFunctionParameters :
MaybeNamedParam (,
MaybeNamedParam )*,
?MaybeNamedParam :
OuterAttribute* ( ( IDENTIFIER |_
):
)? TypeMaybeNamedFunctionParametersVariadic :
( MaybeNamedParam,
)* MaybeNamedParam,
OuterAttribute*...
函数指针类型使用 fn
关键字编写,它引用一个在编译时不一定已知的函数。它们可以通过从 函数项 和非捕获 闭包 进行强制转换来创建。
unsafe
限定符表示该类型的值是一个 不安全函数,而 extern
限定符表示它是一个 外部函数。
可变参数只能使用带有 "C"
或 "cdecl"
调用约定的 extern
函数类型来指定。
一个示例,其中 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); }
函数指针参数上的属性
函数指针参数上的属性遵循与 常规函数参数 相同的规则和限制。