我刚才在一些示例代码中遇到了这个问题,我以前从未见过它。对于返回类型但不使用返回值的内联函数,作者在调用前加上(void)
。这实际上是否做任何事情?为什么void以这种方式使用内联函数?
例子:
inline some_object& SomeClass::doSomething();
SomeClass o;
(void)o.doSomething();
我刚才在一些示例代码中遇到了这个问题,我以前从未见过它。对于返回类型但不使用返回值的内联函数,作者在调用前加上(void)
。这实际上是否做任何事情?为什么void以这种方式使用内联函数?
例子:
inline some_object& SomeClass::doSomething();
SomeClass o;
(void)o.doSomething();
这是(IMO)一种可怕的做法,它被一些工具鼓励,它们给出了关于调用函数和忽略返回函数的警告。
解决此问题的正确方法是为工具提供可合理忽略返回值的函数列表。如果该工具不支持该功能,则可能无用,应该扔掉。在编译器的情况下,您可能无法自行丢弃该工具,并且可能不得不在全局禁用该警告时解决。
1.最常见的类似lint
,但一些编译器可以做同样的。
要压制源代码分析器的警告,调用者忽略返回结果。 – WhozCraig
禁止关于忽略函数的返回值的编译器警告。 –
通过转换为'void',它可能不会在某些编译器设置为严格的警告级别时产生未使用的值警告。所以也许它是为了得到干净的编译。同样,如果你有一个带有未使用参数的函数(为了匹配一个签名,例如QT信号),你可以在函数内部将参数强制转换为void,并且仍然有一个没有任何警告的'clean'编译。 – infixed