int fn();
void whatever()
{
(void) fn();
}
Run Code Online (Sandbox Code Playgroud)
是否有任何理由将未使用的返回值转换为无效,或者我是否认为这完全是浪费时间?
跟进:
那看起来相当全面.我认为这比评论未使用的返回值更好,因为自我记录代码比评论更好.就个人而言,我会关掉这些警告,因为这是不必要的噪音.
如果一个虫子逃脱,我会吃掉我的话......
在用户GMan使用此答案时,我制作了以下代码段(使用Visual C++ 9编译):
class Class {
public:
operator void() {}
};
Class object;
static_cast<void>( object );
(void)object;
object.operator void();
Run Code Online (Sandbox Code Playgroud)
在使用调试器踩到后,我发现转换为void不调用Class::operator void(),只有第三个invokation(显式调用运算符)实际上调用了运算符,两个转换只是什么都不做.
为什么operator void不使用强制语法调用?
在24.2.3 Input iterators,C++标准指定输入迭代器的一个要求作为表达式(void)r++等效(void)++r.
你也可以在cppreference上看到这个.
那是什么表达?这个要求有什么意义?为什么需要?
它看起来像一个C风格的类型转换为void的结果r++还是++r,但我不认为这是它到底是什么.这就是说,稍微离题,看起来我可以void在类中定义转换运算符.gcc和clang都编译它,但clang发出警告:
警告:永远不会使用将'C'转换为'void'的转换函数