布尔函数与true / false比较

时间:2016-10-01 01:59:37

标签: c++

所以我有一个布尔函数:

bool func(int x, int y){
       // do something
   if (x==y){
      return true;
      }  
}

当我在if循环中使用该函数时,

if (func(x, y)){
   // do something
}

它与

不同
if (func(x, y) == true){
   // do something
}

这是什么原因?

BTW:我正在使用Visual Studio 2015。

谢谢!

2 个答案:

答案 0 :(得分:2)

if语句完全相同。它们在逻辑上彼此相同。

问题是,如果比较失败,您的func不会返回值。

这会导致未定义的行为。

如果你的编译器对你大喊大叫,当你试图编译它时,这将证明为什么你不应该忽略编译器的警告消息。

如果您的编译器是静默的,请查看其文档如何打开其他警告。

答案 1 :(得分:2)

if语句确实相同,但代码的问题是,如果x不等于y,则无法返回任何内容。老实说,这段代码甚至不应该编译,因为VC ++应该意识到如果x不等于y它将不会返回任何内容,并且此函数将无法按预期运行。您可能希望将代码更改为更安全:

bool func(int x, int y){
       // do something
   return x==y;
}

这使得它无论如何返回一个布尔值。如果x等于y则返回true,否则返回false。同样,这必须是Visual Studio编译器的错误,或者您没有给我们正确的代码。仅供参考:如果这是g ++或clang ++编译器,由于我解释的原因,该代码将无法编译。

您应该使用-Wall(所有警告)为VC ++编译器打开其他警告。这可以帮助您实现这一目标:https://blogs.msdn.microsoft.com/vcblog/2010/12/14/off-by-default-compiler-warnings-in-visual-c/

始终确保您已-Wall启用“安全”代码,并确保如果发生任何事情,您的函数将返回,除非它是void /无返回功能。这通常由像clang ++这样的编译器完成。 clang ++和VA有一个插件:http://llvm.org/builds/。您还可以在Visual Studio插件管理器中搜索clang,以便直接从IDE安装。