为什么将未使用的返回值转换为无效?

为什么将未使用的返回值转换为无效?

int fn();void whatever(){
    (void) fn();}

是否有任何理由将一个未使用的回报价值变为无效,还是我认为这完全是浪费时间的想法是正确的?

后续行动:

看来很全面。我认为它比注释一个未使用的返回值更好,因为自记录代码比注释更好。就我个人而言,我会关掉这些警告,因为这是不必要的噪音。

如果一只虫子因为它逃跑了我会吃了我的话.。


富国沪深
浏览 451回答 3
3回答

人到中年有点甜

很大程度上涵盖了这样做的动机,即显式地向其他“开发人员”表明您知道此函数返回,但您显式地忽略了它。这是一种确保在必要时始终处理错误代码的方法。我认为对于C+来说,这可能是我唯一喜欢使用C风格的转换的地方,因为使用完整的静态转换表示法在这里感觉有点过火了。最后,如果您正在审查或编写编码标准,那么明确声明对重载运算符的调用(不使用函数调用符号)也是一个好主意:class A {};A operator+(A const &, A const &);int main () {   A a;   a + a;                 // Not a problem   (void)operator+(a,a);  // Using function call notation - so add the cast.

慕仙森

在工作中,我们使用它来确认函数有一个返回值,但是开发人员断言忽略它是安全的。因为您将这个问题标记为C+,所以您应该使用静态铸造:static_cast<void>(fn());就编译器而言,将返回值转换为空没有什么意义。

慕雪6442864

铸造到void用于抑制未使用变量和未保存的返回值或表达式的编译器警告。“标准”(2003)在第5.2.9/4节中说,任何表达式都可以显式转换为“cvvoid”类型。表达式值是弃置.所以你可以写://suppressing unused variable warningsstatic_cast<void>(unusedVar);static_cast<const void>(unusedVar);static_cast<volatile void>(unusedVar);//suppressing return value warningsstatic_cast<void>(fn());static_cast<const void>(fn());static_cast<volatile void>(fn());//suppressing unsaved expressionsstatic_cast<void>(a + b * 10);static_cast<const void>( x &&y || z);static_cast<volatile void>( m | n + fn());所有表格均有效。我通常把它缩短为://suppressing&nbsp; expressions(void)(unusedVar);(void)(fn());(void)(x &&y || z);也没问题。
打开App,查看更多内容
随时随地看视频慕课网APP