函数指针类型

语法
裸函数类型 :
   ForLifetimes? FunctionTypeQualifiers fn
      ( FunctionParametersMaybeNamedVariadic? ) BareFunctionReturnType?

函数类型限定符:
   unsafe? (extern Abi?)?

裸函数返回类型:
   -> 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 变体

函数指针参数上的属性

函数指针参数上的属性遵循与 常规函数参数 相同的规则和限制。