函数指针类型
function-pointer.md
commit: 761ad774fcb300f2b506fed7b4dbe753cda88d80
本章译文最后维护日期:2021-1-17
句法
BareFunctionType :
ForLifetimes? FunctionTypeQualifiersfn
(
FunctionParametersMaybeNamedVariadic?)
BareFunctionReturnType?FunctionTypeQualifiers:
unsafe
? (extern
Abi?)?BareFunctionReturnType:
->
TypeNoBoundsFunctionParametersMaybeNamedVariadic :
MaybeNamedFunctionParameters | MaybeNamedFunctionParametersVariadicMaybeNamedFunctionParameters :
MaybeNamedParam (,
MaybeNamedParam )*,
?MaybeNamedParam :
OuterAttribute* ( ( IDENTIFIER |_
):
)? TypeMaybeNamedFunctionParametersVariadic :
( MaybeNamedParam,
)* MaybeNamedParam,
OuterAttribute*...
函数指针类型(使用关键字 fn
写出)指向那些在编译时不必知道函数标识符的函数。它们也可以由函数项类型或非捕获(non-capturing)闭包经过一次自动强转(coercion)来创建。
非安全(unsafe
)限定符表示类型的值是一个非安全函数,而外部(extern
)限定符表示它是一个外部函数。
可变参数只能通过使用 "C"
或 "cdecl"
的 ABI调用约定的 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); }
函数指针参数上的属性
函数指针参数上的属性遵循与常规函数参数相同的规则和限制。