8

考虑以下 C++11 代码:

struct C {};

void f(int(C));

类型是否f相同:

typedef int T(C);
void f(T);

或者是这样的:

void f(int C);

也就是说,应该将(C)其解释为declarator参数名称的C一个,还是abstract-declarator一个函数参数的一个?

这在标准中的什么地方规定?

4

1 回答 1

12

这是在 8.2p7 中指定的

7 另一个歧义出现在函数声明的参数声明子句中,或者在作为 sizeof 或 typeid 运算符的操作数的类型 ID 中,当类型名称嵌套在括号中时。在这种情况下,选择是在声明函数指针类型的参数和声明在 declarator-id 周围带有冗余括号的参数之间进行选择。解决方法是将类型名称视为简单类型说明符而不是声明符 ID。

因此,您的参数具有 type int(*)(C),正如您在第一个可能的解释中所示。

于 2013-06-25T15:29:25.903 回答