首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(int())是否合法表达?

(int())是否合法表达?
EN

Stack Overflow用户
提问于 2016-09-01 21:35:16
回答 1查看 438关注 0票数 20

这个问题是由Is sizeof(void()) a legal expression?提出的,但有一个重要的区别,如下所述。

有关的表述是:

代码语言:javascript
运行
复制
sizeof( int() )

在C++语法中,出现了:

一元-表达:

  • sizeof一元表达式
  • sizeof (型-id )

然而,( int() )可以匹配这两种情况,具有不同的含义:

  • 作为一元表达式,它是一个值初始化的int prvalue,它被多余的括号所包围。
  • 作为一个类型id,它是没有参数返回int的函数的类型。

sizeof的语义约束(即C++14 expr.size to /1)中,它解释了表单sizeof(类型-id )不能应用于函数类型。

但是,我不确定违反语义约束是否意味着sizeof( int() )是正确的,并使用了sizeof一元表达式形式;或者是否有其他规则在语法匹配的早期阶段消除了这两种情况的歧义。

注意:对于另一个问题sizeof(void()),这两种解释都是无效的,因此可以认为编译器拒绝该表达式是正确的,并有一条错误消息指示该表达式与类型id形式匹配。然而,gcc拒绝了sizeof( int() )的一条关于类型id的信息.

明确地说,我的问题是:“sizeof( int() )是一个合法的表达式吗?”,特别是当上述两个项目符号匹配时,语法匹配是如何工作的细节。

EN

Stack Overflow用户

回答已采纳

发布于 2016-09-01 21:38:03

不,sizeof( int() )格式不正确,因为int()被认为是一个类型id.具体来说,它是一个函数类型,sizeof不能应用于一个函数类型。

[dcl.ambig.res]/2

函数式转换和类型id之间的相似性可能会产生歧义。其解决办法是,任何可能是其句法上下文中的类型id的构造都应被视为类型id。

给出了这个例子:

void (签名的char a) { sizeof(int());// type-id (格式错误的) sizeof(int(a));//表达式signed(int(A));// type-id (格式错误)

票数 22
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39281235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档