C++是静态类型语言,提供了丰富的数据类型,它的简单声明的文法如下(摘自C++11标准):
simple-declaration:
decl-specifier-seq(opt) init-declarator-list(opt) ;
attribute-specifier-seq decl-specifier-seq(opt) init-declarator-list ;
init-declarator-list:
init-declarator
init-declarator-list , init-declarator
init-declarator:
declarator initializer(opt)
decl-specifier-seq:说明符序列,由空格分隔的说明符。
init-declarator-list:声明符列表,由逗号分隔的声明符。
说明符包括:
cv-qualifier
constexpr
storage class specifier (register, static, thread_local (since C++11), extern, mutable)
simple type specifier (char, char8_t (since C++20), char16_t, char32_t (since C++11), wchar_t, bool, short, int, long, signed, unsigned, float, double, void)
等等
声明符包括:
unqualified-id attr(optional)
qualified-id attr(optional)
... identifier attr(optional)
* attr(optional) cv(optional) declarator
nested-name-specifier * attr(optional) cv(optional) declarator
& attr(optional) declarator
&& attr(optional) declarator
noptr-declarator [ constexpr(optional) ] attr(optional)
noptr-declarator ( parameter-list ) cv(optional) ref(optional) except(optional) attr(optional)
&、[]、()可以被递归使用。
以一个高阶函数作为例子:
void *(*(*f( void *(*(*fptr)())() ))())()
{
return fptr;
}
注1:所谓高阶函数是指至少满足下列两个条之一的函数:
- 该函数的参数中至少有一个是函数
- 该函数的返回值是一个函数
高阶函数是高阶逻辑的实现,一般应用于人工智能领域。Lisp对高阶函数的支持最友好。
注2:由于函数在C++中是一个类型,不能直接用于函数参数和返回值,因此使用函数指针。另外在C++实践中不要这样定义高阶函数,它非常的ugly。从C++11开始支持std::function,推荐用它来定义函数算子,更灵活更清晰。
参考:https://en.cppreference.com/w/cpp/language/declarations