这个程序如何编译好?
int main() {
void(); // Does this create a "void" object here?
}
Run Code Online (Sandbox Code Playgroud)
我已经在MSVC和GCC下进行了测试.但这void
是一个不完整的类型.对任何其他不完整的用户定义类型执行相同操作时,
class Incomplete;
int main() {
Incomplete(); // Error saying "Incomplete" is incomplete.
}
Run Code Online (Sandbox Code Playgroud)
chr*_*ris 11
C++11§5.2.3[expr.type.conv]/2详细介绍(强调我的):
表达式T(),其中T是非数组完整对象类型的简单类型说明符或类型名称说明符,或者(可能是cv限定的)void类型,创建指定类型的prvalue,其值为通过值初始化(8.5)生成类型为T的对象; 没有为void()情况进行初始化.
它只是一个类型的prvalue void
.没有特殊的初始化或任何类似的东西int()
.prvalue就像true
,或nullptr
,或2
.表达式相当于2;
,而void
不是代替int
.
void
类型一直都是特殊的。它确实是不完整的,但在许多通常需要完整类型的上下文中是允许的。否则,例如,void
函数的定义将因void
类型不完整而无效。还可以编写void
类型表达式(对void
函数的任何调用都是此类表达式的示例)。
即使在 C 语言中,您也可以使用void
类型的立即表达式,例如(void) 0
. 您的代码中的内容只是 C++ 特定语法的示例,其本质上执行相同的操作:它生成类型为 的无操作表达式void
。
归档时间: |
|
查看次数: |
272 次 |
最近记录: |