常用的语句,例如(void)x;
可以用来抑制未使用变量x
的警告。但是,如果我尝试编译以下代码,我会得到一些我不太理解的结果:
int main()
{
int x;
(short)x;
(void)x;
(int)x;
}
使用g++编译此内容,我得到以下警告:
$ g++ test.cpp -Wall -Wextra -o test
test.cpp: In function ‘int main()’:
test.cpp:4:13: warning: statement has no effect [-Wunused-value]
(short)x;
^
test.cpp:6:11: warning: statement has no effect [-Wunused-value]
(int)x;
^
所以我得出结论,将类型转换为void
与转换为任何其他类型非常不同,无论目标类型是decltype(x)
还是其他不同的类型。我对可能的解释的猜测是:
- 这只是一个惯例,
(void)x;
而不是其他类型的转换将抑制警告。所有语句都没有任何效果。 - 这种差异与
void x;
不是有效语句而short x;
是有关的。
如果有的话,哪个更正确?如果没有,那么编译器警告的差异如何解释?
void
和将类型转换为其他类型之间差异的机制,而另一个问题则询问为什么要进行void
类型转换。然而,由于这个问题已经有了令人满意的答案,我不会修改它并投票重新开放。这条评论只是为了回答自动生成的“这个回答解决了你的问题吗?” TLDR:没有。 - Ruslan