大卫的答案几乎涵盖了这一点的动机,明确地向其他"开发人员"表明你知道这个函数会返回,但是你明确地忽略了它.
这是一种确保始终处理必要的错误代码的方法.
我认为对于C++来说,这可能是我唯一喜欢使用C风格的演员阵容的地方,因为使用完整的静态演员表示法在这里感觉有些过分.最后,如果您正在查看编码标准或编写一个编码标准,那么明确声明对重载运算符(不使用函数调用表示法)的调用也应该免除这一点也是一个好主意:
class A {}; A operator+(A const &, A const &); int main () { A a; a + a; // Not a problem (void)operator+(a,a); // Using function call notation - so add the cast.
有点偏离主题,但为什么你会做"a + a;" 那样没有使用返回值?这似乎是对我的滥用副作用,并混淆了代码的意图. (6认同)
那么,你每天使用的那个将是'a = a'.这将返回分配给对象(对于所有表现良好的类,即!:)).另一个例子是:os <<"Hello World"<< std :: endl.它们中的每一个都返回"os"对象. (3认同)
David Holm.. 44
在工作中,我们使用它来确认该函数具有返回值,但开发人员声称忽略它是安全的.由于您将问题标记为C++,因此您应该使用static_cast:
static_cast(fn());
就编译器而言,将返回值转换为void几乎没有意义.
大卫的答案几乎涵盖了这一点的动机,明确地向其他"开发人员"表明你知道这个函数会返回,但是你明确地忽略了它.
这是一种确保始终处理必要的错误代码的方法.
我认为对于C++来说,这可能是我唯一喜欢使用C风格的演员阵容的地方,因为使用完整的静态演员表示法在这里感觉有些过分.最后,如果您正在查看编码标准或编写一个编码标准,那么明确声明对重载运算符(不使用函数调用表示法)的调用也应该免除这一点也是一个好主意:
class A {}; A operator+(A const &, A const &); int main () { A a; a + a; // Not a problem (void)operator+(a,a); // Using function call notation - so add the cast.
在工作中,我们使用它来确认该函数具有返回值,但开发人员声称忽略它是安全的.由于您将问题标记为C++,因此您应该使用static_cast:
static_cast(fn());
就编译器而言,将返回值转换为void几乎没有意义.
这样做的真正原因可以追溯到C代码上使用的工具,称为lint.
它分析代码以查找可能的问题并发出警告和建议.如果某个函数返回了一个未经检查过的值,lint
则会发出警告,以防这是偶然的.要lint
对此警告保持沉默,请将呼叫转为(void)
.
Casting to void
用于抑制未使用变量和未保存返回值或表达式的编译器警告.
标准(2003)在§5.2.9/ 4中说,
可以将任何表达式显式转换为"cv void"类型.表达式值将被丢弃.
所以你可以写:
//suppressing unused variable warnings static_cast(unusedVar); static_cast (unusedVar); static_cast (unusedVar); //suppressing return value warnings static_cast (fn()); static_cast (fn()); static_cast (fn()); //suppressing unsaved expressions static_cast (a + b * 10); static_cast ( x &&y || z); static_cast ( m | n + fn());
所有表格均有效.我通常把它缩短为:
//suppressing expressions (void)(unusedVar); (void)(fn()); (void)(x &&y || z);
它也没关系.