C ++转换为void的目的是什么?

时间:2010-11-14 17:32:40

标签: c++ virtual

  

可能重复:
  casting unused return values to void

我读了一些源代码,其中声明了接口类中的许多虚函数,默认实现如下:

virtual bool FunctionName(TypeName* pointer)
{
   (void)pointer;
   return true;
}

请问在默认实现中将指针转换为void的目的是什么?

2 个答案:

答案 0 :(得分:18)

多种用途取决于您投射的内容

  • 将您对编译器的意图标记为完全是无操作的表达式(例如,用于禁止警告)
  • 将您的意图标记为编译器和程序员忽略某些内容的结果(例如函数调用的结果)
  • 在函数模板中,如果返回类型由模板参数类型T给出,并且在某些情况下返回某些函数调用的结果,该结果可能与T不同。在T情况下,void的显式强制转换可以防止编译时错误:
        int f() { return 0; } void g() { return (void)f(); }
  • 禁止编译器选择逗号运算符重载((void)a, b永远不会调用重载的逗号运算符函数)。

请注意,如果将类对象强制转换为operator void(),标准会保证永远不会调用void(但某些GCC版本会忽略该规则)。

答案 1 :(得分:12)

在这种情况下,只是为了避免编译器对未使用参数的警告。