在我使用的一个库中,我看到了这段代码:
template<typename T>
void f(SomeTemplatedClass<T> input)
{
(void)input;
...
use(input); // code that uses input
}
我不知道这段代码的含义是什么。如果我将演员表删除为空,我会得到一个
statement has no effect
gcc中的警告。所以我想有人故意这样做,故意添加演员以摆脱警告。
您是否对任何无效的陈述有任何经验,但由于某种原因需要它?
修改
假设这与模板无关是否安全?例如绕过旧的编译器错误等?
答案 0 :(得分:4)
这种结构是欺骗编译器不向未使用的参数发出警告的常用方法。我没有看到它用于任何其他目的。
(void)input;
虽然很常见,但这也是一个非常糟糕的主意。
根据C ++标准N3936 S5.4 / 11:
在某些情况下,表达式仅出现其副作用。这种表达式称为丢弃值表达式。计算表达式并丢弃其值。
编译器有权观察到没有副作用,因此该构造至少应该发出警告。根据@chris的说法,MSVC就是其中一个编译器。