2010-11-14 44 views
6

Possible Duplicate:
casting unused return values to voidC++铸造无效的目的是什么?

我看了一些源代码,并在接口类是许多虚拟函数声明和缺省实现这样:

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

请问什么是铸造指针的目的在默认实现中失效?

+2

这不应该编译,因为函数需要返回一个值。 – 2010-11-14 17:34:32

+1

这被问了无数次。将某些东西转换为“void”表示您没有使用返回值。在你的情况下,这是一个无操作。 – zneak 2010-11-14 17:35:58

+0

@zneak:“指针”不是一个返回值。不是这个问题的一个骗局,尽管我确信这个参数也被覆盖过。 – 2010-11-14 17:46:44

回答

18

一举多得取决于你投什么

  • 标记你打算到这完全是为写在无操作的目的是(用于抑制警告,例如)的表达式
  • 标记编译您有意编译器和编程器,它的东西,结果被忽略(函数调用的结果,例如)
  • 在一个函数模板,如果返回类型由模板参数类型T给出,并返回了某些函数调用的结果可能与不同在某些情况下。显式类型转换到T可能,在void的情况下,防止编译时错误:
    int f() { return 0; } void g() { return (void)f(); }
  • 抑制编译器选择一个逗号操作符重载((void)a, b永远不会调用一个重载逗号操作功能)。

注意,标准保证永远不会有所谓的,如果你施放一个类对象void一个operator void()(一些版本的GCC忽略规则,虽然)。

12

在这种情况下,它只是避免编译器关于未使用的参数警告。

+0

+1:为了给出正确的答案 – 2010-11-14 19:07:58

+0

为什么首先要做这样的参数? – stackptr 2014-03-18 22:58:06

+1

该参数可能发生,因为其他一些也实现此虚函数的类实际上使用该参数。 – 2014-07-24 11:29:15