函数声明语法
函数可以是全局的,也可以是类或结构的成员。 使用以下序列来声明它们:
[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]
声明说明符。 请参阅说明符。
在类中,有可选的 friend 说明符。
可选存储类说明符。对于全局函数,允许的存储类说明符为 static 和 extern。对于类成员函数,不允许使用 extern。
可选函数说明符。对于全局函数,唯一允许的函数说明符是 inline。对于类成员函数,允许使用 virtual 和 inline,对于构造函数,允许使用 explicit。
指示返回类型的类型说明符(受通过使用 * 或 & 对指针或引用类型进行的修改的约束)。
声明符。
修改返回类型的可选指针或引用运算符
指定调用约定的可选 Microsoft 专用修饰符。请参阅 Microsoft 专用修饰符。
函数名。如果函数为类或结构的成员,则可以使用范围解析运算符来限定名称。
括在括号 () 中的参数声明列表。
可选 const 或 volatile 限定符。在此上下文中,const 可能仅用于类成员和用于指示函数将不会修改类的数据成员。
如果返回类型是函数指针,则声明符的语法可能比较复杂,如下所述。
- 指示函数所引发的异常的可选异常规范。请参阅异常规范。
如此声明的标识符的类型可能由 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 的声明等效。