pet*_*cja 17 c++ expression void
显然,这个三元表达式void()作为一个参数编译:
void foo() {}
//...
a == b ? foo() : void();
Run Code Online (Sandbox Code Playgroud)
标准是void()一个有效的表达式,还是只是一个编译器的东西?如果它是有效的,那么它是一种什么样的表达方式?
Nat*_*ica 20
void()是一个有效的表达式并产生一个类型为 的纯右值void。在 C++ 20 中,这将扩展为还包括void{}. 相关部分是[expr.type.conv]/2
如果初始值设定项是带括号的单个表达式,则类型转换表达式等效于相应的强制转换表达式。否则,如果类型是
cv void并且初始化程序是()或{}(在包扩展之后,如果有),则表达式是不执行初始化的指定类型的纯右值。否则,表达式是指定类型的纯右值,其结果对象是用初始化程序直接初始化的。如果初始值设定项是带括号的可选表达式列表,则指定的类型不应是数组类型。