繁体   English   中英

decltype(void())中的void()究竟是什么意思?

[英]What does the void() in decltype(void()) mean exactly?

这是对这个问题的跟进,更准确地说是这个答案的评论。

什么是void()decltype(void())代表什么呢?
它表示函数类型,表达式还是其他什么?

使用超链接C ++语法decltype(void())的解析是:

decltype( expression )
decltype( assignment-expression )
decltype( conditional-expression )

......涉及运营秩序的许多步骤都在这里......

decltype( postfix-expression )
decltype( simple-type-specifier ( expression-listopt ) )
decltype( void() )

所以void()在这里是一种expression ,特别是postfix-expression

具体而言,引用2011年ISO C ++标准的第5.2.3节[expr.type.conf]第2段:

表达式T() ,其中T是非数组完整对象类型的简单类型说明符类型名称说明 ,或者(可能是cv限定的) void类型,创建指定类型的prvalue,它是值 -初始化(8.5;没有为void()情况进行初始化)。

所以void()是一个void类型的表达式,就像int()是一个int类型的表达式(值为0 )。 很明显,void表达式没有值,但是这里它是decltype的操作数,所以它没有被计算。 decltype仅指其操作数的类型,而不是其值。

decltype(void())只是一种引用void类型的冗长方式。

我引用@JoachimPileborg的评论似乎正确地解释了它:

我想我现在想出来了,decltype需要一个表达式,而不是一个类型。 void()实际上不是这里的类型,但是表达式,C样式转换(就像例如int(12.34))void(void)不是表达式因此它不起作用。 编译器解析不同的东西取决于上下文,当它期望一个类型它作为一个类型解析时,它需要一个表达式解析它作为一个表达式。 sizeof()(带括号)首先需要一个类型,否则它被解析为带括号的表达式。

我不是在寻找学分或声誉。
无论如何,我想这是一个有趣的答案,对于未来的读者来说,值得一个专门的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM