c++ - 函数指针定义中是否允许使用参数名称

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

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

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

我假设这是定义良好的代码,因为它可以正常编译和运行:https://ideone.com/C4mhsI

但我以前从未见过这种情况(可能是因为它增加了本来就很难解析的函数指针的复杂性。)尽管如此,我希望看到一个声明,表明这是合法的,而不是一些疯狂的 gcc 扩展。有人能给我找点东西吗?

最佳答案

您可以遵循 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]
  [...]

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

如果您对某个函数执行此操作,您会发现它也以“参数和限定符”结尾。它们使用相同的语法,并且 [decl.ptr] 下的标准中没有任何禁止这一点的内容。 .

关于c++ - 函数指针定义中是否允许使用参数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48240603/

相关文章:

c - 带有#include 指令的尾随字符

c++ - 为什么 std::unique_ptr::reset() 总是无异常?

c++ - 空结构(或结构填充)可以有任意值吗?

c++ - 为什么在此代码中使用复制构造函数?

c++ - 在哪里声明类成员模板的偏特化?

C++ 在 Vector 中使用不可赋值的对象

c++ - 静态变量和函数的使用

perl - 禁止 Moose 类中的非属性参数

javascript - 如何将表格行解析为 JS 函数 onClick 的参数?

c++ - 如何将数组传递给函数?使用 C++ 作为 OO 类