gpt4 book ai didi

参数子句中声明符和抽象声明符之间的 C++11 歧义?

转载 作者:可可西里 更新时间:2023-11-01 17:37:08 26 4
gpt4 key购买 nike

考虑以下 C++11 代码:

struct C {};

void f(int(C));

f 的类型是否与:

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

或者是这样的:

void f(int C);

也就是说,(C) 应该被解释为参数名称 Cdeclarator,还是作为一个抽象-函数参数的声明符 ?

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

最佳答案

这是在 8.2p7 中指定的

7 Another ambiguity arises in a parameter-declaration-clause of a function declaration, or in a type-id that is the operand of a sizeof or typeid operator, when a type-name is nested in parentheses. In this case, the choice is between the declaration of a parameter of type pointer to function and the declaration of a parameter with redundant parentheses around the declarator-id. The resolution is to consider the type-name as a simple-type-specifier rather than a declarator-id.

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

关于参数子句中声明符和抽象声明符之间的 C++11 歧义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17301201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com