我知道
(void)0
在 C/C++ 中是一个空操作。
然而,当我查看<cassert>
中的代码时,我看到了void (0)
。
我猜它类似于
int (0)
或int{0}
。
我也尝试过void{}
并且有效。
看来这是对void
的零初始化。
但是
void
是一个不完整类型,为什么编译器不抱怨呢? (g++-14 -std=c++23 -Wall
)
当您在 C++ 中编写
T(E)
时,其中 T
是类型,E
是单个表达式,则称为函数式强制转换表达式,与旧式强制转换表达式 (T)E
完全相同。
所以
void(0)
完全等同于 (void)0
。
(在运算符优先级和语法允许
T
准确包含的内容方面存在一些解析差异。)