功能指针定义中是否允许使用参数名称

时间:2018-01-13 14:03:12

标签: c++ parameters language-lawyer function-pointers named-parameters

所以我刚看到一个使用命名参数的函数指针声明示例:

int (*func)(int a, int b) = &foo;

我假设这是定义良好的代码导致它编译并运行良好:https://ideone.com/C4mhsI

但我以前从未见过这个(可能是因为它增加了已经难以解析的函数指针的复杂性。)尽管如此,我还是希望看到一个声明这是合法的而不是一些疯狂的gcc延期。有人能找到我的东西吗?

2 个答案:

答案 0 :(得分:6)

您可以遵循declarator的语法,这是一个没有任何类型或decl说明符的声明。

declarator:
  ptr-declarator
  [...]

ptr-declarator:
  noptr-declarator
  ptr-operator ptr-declarator

noptr-declarator:
  [...]
  noptr-declarator parameters-and-qualifiers
  ( ptr-declarator )

parameters-and-qualifiers:
  ( parameter-declaration-clause ) [...]

ptr-operator:
  * attribute-specifier-seq[opt] cv-qualifier-seq[opt]
  [...]

我删除了所有不需要的语法规则,以便能够更轻松地遵循它。我不会这样做因为写下来有点痛苦,但最后你会发现你有参数和限定符代表参数。

如果您为某个函数执行此操作,您将看到它也以 parameters-and-qualifiers 结束。它们使用相同的语法,并且在[decl.ptr]下的标准中没有任何禁止这一点。

答案 1 :(得分:-1)

就像你可以在函数声明中指定参数名一样: int funct(int a, int b);你也可以在函数指针中int (*func)(int a, int b)。在这两种情况下,名字都不做任何事情,在实践中,它们被用作文档辅助,以便于阅读。

相关问题