【发布时间】:2018-08-01 10:52:34
【问题描述】:
阅读了最令人头疼的解析后,我做了一些实验,发现了这个程序。有两条非常相似的线。其中一个在 g++7 和 clang++-3.9 中都会产生警告,另一个则不会。
int main() {
void(); // no warning
int(); // warning: statement has no effect
}
在第二行中,int 类型的默认构造对象被创建并立即销毁,因此未被使用。但是第一行会发生什么?如果以同样的方式解析,应该是错误的,因为创建void类型的对象是非法的。另一方面,它看起来也不像函数声明。
【问题讨论】:
-
嗯,会不会和这个有关? stackoverflow.com/questions/34288844/…
-
@Raindrop7 试试 -Wall -Wextra,我的结果就是这些。
-
转换为
void用于删除有关未使用变量的警告。他们可能以同样的方式对待这个表达式。 -
@Jarod42 这是一个显式类型转换,所以templated functions do the right thing 我不知道为什么人们把它看成是强制转换。
标签: c++ language-lawyer most-vexing-parse