Meaning of I(I())

Meaning of I(I())

本文关键字:of Meaning      更新时间:2023-10-16

示例代码:

typedef int I;
struct X{ X(int); };
int main()
{
int(int());
X(X());
I(I());
}

int(int());是使用函数式强制表示法的表达式 - 它是使用值初始化int初始化的临时int

X(X());是一个名为X的函数的声明,该函数不带返回结构X的参数。

我的问题是:这里I(I())的含义是什么? 标准中的哪些规则决定了这三种情况之间的含义差异?

该规则规定,如果构造是声明或语句的模糊语法,则将其视为声明。

[stmt.ambig] 1 涉及表达式语句和声明的语法存在歧义:表达式- 以函数式显式类型转换 (5.2.3( 作为其最左侧子表达式的语句可以是不可分割的 可从第一个声明符以 (.在这些情况下,该语句是 声明。

X(X());是不明确的,因为它可以是强制转换或函数声明,因此它被视为声明。

int(int());不能是函数声明,因为int作为关键字,不是函数的有效名称。所以,没有歧义,这是一个演员阵容。

同样,I(I());不能是函数声明,因为虽然不是关键字,但I也不是有效名称,因为它会将类型I重新声明为函数,这是不允许的,因此它是强制转换。