【发布时间】:2018-01-11 18:42:45
【问题描述】:
示例代码:
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()) 这里是什么意思?标准中的哪些规则决定了这三种情况的含义差异?
【问题讨论】:
-
typedef int I使I的行为完全类似于int。它只是分配另一个名称。因此I(I())和int(int())具有完全相同的含义。有关typedef的更多信息,请参阅[dcl.typedef]。 -
根据gcc/clang,对于
X,函数声明I返回int。 -
这三个都是函数声明
-
@Sopel:错误。正如问题中明确指出的那样,第一个不是函数声明。
int是关键字这一事实在第一种情况下产生了重大影响。 -
哎呀,对不起,没有名字,你是对的
标签: c++ language-lawyer most-vexing-parse