考虑以下C ++ 11代码:
struct C {};
void f(int(C));
f
的类型是否与:
typedef int T(C);
void f(T);
或者是这样的:
void f(int C);
也就是说,(C)
应该被解释为参数名declarator
的{{1}},还是函数参数的C
?
标准中指定的是什么?
答案 0 :(得分:12)
这在8.2p7中指定
7 另一个歧义出现在函数声明的parameter-declaration-clause中,或者出现在type-id中 当类型名称嵌套在括号中时,是sizeof或typeid运算符的操作数。在这种情况下, 选择是在函数类型指针的参数声明和a的声明之间 参数,在declarator-id周围有冗余括号。决议是考虑类型名称 作为simple-type-specifier而不是declarator-id。
因此,您的参数的类型为int(*)(C)
,正如您在第一个可能的解释中所示。