C ++什么是强制失效的目的?
可能重复:
将未使用的返回值转换为void
我读了一些源代码,并且在其中声明了接口类中的许多虚函数,并默认实现这些代码:
virtual bool FunctionName(TypeName* pointer) { (void)pointer; return true; }
请问在默认的实现中,将指针转换为void的目的是什么?
根据你投的多个目的
- 将您的意图标记为编译器,表示完全没有任何操作的expression意图是书写的(例如,用于禁止警告)
- 标记你的意图是编译器和程序员忽略某些东西的结果(例如函数调用的结果)
- 在函数模板中,如果返回types是由模板参数types
T
,并且在某些情况下返回可能与T
不同的某个函数调用的结果。 对于T
的明确转换可以在void
情况下防止编译时错误:
int f() { return 0; } void g() { return (void)f(); }
- 禁止编译器select逗号运算符重载(
(void)a, b
将永远不会调用重载的逗号运算符函数)。
请注意,标准保证,如果您将类对象强制为void
(某些GCC版本忽略该规则,则不会有operator void()
)。
在这种情况下,只是为了避免编译器对未使用参数的警告。