函数声明语法

函数可以是全局的,也可以是类或结构的成员。 使用以下序列来声明它们:

[friend] [storage-class-specifier] [function-specifier]
[[cv-qualifer] type-specifier] declarator [cv-qualifer] 
[exception-spec]
[friend] [storage-class-specifier] [function-specifier]
[[cv-qualifer] type-specifier] [*|&] [ms-modifer] identifier 
( argument-list ) [cv-qualifer] [exception-spec]
  1. 声明说明符。 请参阅说明符

    • 在类中,有可选的 friend 说明符。

    • 可选存储类说明符。对于全局函数,允许的存储类说明符为 static 和 extern。对于类成员函数,不允许使用 extern

    • 可选函数说明符。对于全局函数,唯一允许的函数说明符是 inline。对于类成员函数,允许使用 virtualinline,对于构造函数,允许使用 explicit

    • 指示返回类型的类型说明符(受通过使用 * 或 & 对指针或引用类型进行的修改的约束)。

  2. 声明符。

    • 修改返回类型的可选指针或引用运算符

    • 指定调用约定的可选 Microsoft 专用修饰符。请参阅 Microsoft 专用修饰符。

    • 函数名。如果函数为类或结构的成员,则可以使用范围解析运算符来限定名称。

    • 括在括号 () 中的参数声明列表。

    • 可选 const 或 volatile 限定符。在此上下文中,const 可能仅用于类成员和用于指示函数将不会修改类的数据成员。

如果返回类型是函数指针,则声明符的语法可能比较复杂,如下所述。

  1. 指示函数所引发的异常的可选异常规范。请参阅异常规范

如此声明的标识符的类型可能由 const 或 volatile(如果指定)函数、采用指定的参数列表以及返回声明说明符指示的类型构成。

下面的示例说明了两个简单函数声明:

char *strchr( char *dest, char *src );
static int atoi( const char *ascnum ) const;

声明返回指向函数的指针的函数

建议使用 typedef 声明函数指针类型的别名(如果声明返回函数指针类型的函数)。例如

typedef int (*fp)(int);
fp myFunction(char* s); // function returning function pointer

如果不执行此操作,则函数声明的正确语法可以通过用函数名称和参数列表替换标识符(上例中为 fp)来从函数指针的声明符语法推导出,如下所示:

int (*myFunction(char* s))(int);

前面的声明与使用上面的 typedef 的声明等效。

请参见

参考

函数声明