"void();"作为单独的语句在C++中是什么意思?

What does "void();" as a separate statement mean in C++?

本文关键字:C++ 是什么 意思 语句 单独 void      更新时间:2023-10-16

这个程序是如何编译的?

int main() {
    void();  // Does this create a "void" object here?
}

我在MSVC和GCC下都测试过。但void是一个不完全类型。当您对任何其他不完整的用户定义类型执行相同操作时,

class Incomplete;
int main() {
    Incomplete();  // Error saying "Incomplete" is incomplete.
}

C++11§5.2.3[expr.type.conv]/2详细介绍(强调矿):

表达式T(),其中T是非数组完整对象类型或(可能是cv限定的)void类型的简单类型说明符或typename说明符,创建指定类型的prvalue,其值是通过值初始化(8.5)T类型的对象而产生的值对void()情况不进行初始化

它只是一个类型为void的prvalue。没有特殊的初始化或类似int()的任何东西。prvalue类似于truenullptr2。该表达式等效于2;,但适用于void而非int

void类型是并且一直都是特殊的。它确实是不完整的,但在许多通常需要完整类型的上下文中,它是允许的。否则,例如,由于void类型的不完整性,void函数的定义将无效。也可以编写void类型的表达式(对void函数的任何调用都是这种表达式的示例)。

即使在C语言中,您也可以使用void类型的立即表达式,如(void) 0。代码中的内容只是C++特定语法的一个示例,它做的基本上是相同的事情:它生成类型为void的无操作表达式。

在C++中允许构造类型void可以用作模板参数。