这个问题是由Is sizeof(void()) a legal expression?提出的,但有一个重要的区别,如下所述。
有关的表述是:
sizeof( int() )在C++语法中,出现了:
一元-表达:
sizeof一元表达式sizeof (型-id )然而,( int() )可以匹配这两种情况,具有不同的含义:
int prvalue,它被多余的括号所包围。int的函数的类型。在sizeof的语义约束(即C++14 expr.size to /1)中,它解释了表单sizeof(类型-id )不能应用于函数类型。
但是,我不确定违反语义约束是否意味着sizeof( int() )是正确的,并使用了sizeof一元表达式形式;或者是否有其他规则在语法匹配的早期阶段消除了这两种情况的歧义。
注意:对于另一个问题sizeof(void()),这两种解释都是无效的,因此可以认为编译器拒绝该表达式是正确的,并有一条错误消息指示该表达式与类型id形式匹配。然而,gcc拒绝了sizeof( int() )的一条关于类型id的信息.
明确地说,我的问题是:“sizeof( int() )是一个合法的表达式吗?”,特别是当上述两个项目符号匹配时,语法匹配是如何工作的细节。
发布于 2016-09-01 21:38:03
不,sizeof( int() )格式不正确,因为int()被认为是一个类型id.具体来说,它是一个函数类型,sizeof不能应用于一个函数类型。
函数式转换和类型id之间的相似性可能会产生歧义。其解决办法是,任何可能是其句法上下文中的类型id的构造都应被视为类型id。
给出了这个例子:
void (签名的char a) { sizeof(int());// type-id (格式错误的) sizeof(int(a));//表达式signed(int(A));// type-id (格式错误)
https://stackoverflow.com/questions/39281235
复制相似问题