布尔函数与真/假的比较

Boolean function compared with true/false

本文关键字:比较 函数 布尔      更新时间:2023-10-16

我有一个布尔函数:

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。

谢谢!

if语句完全相同。它们在逻辑上是等价的。

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

这会导致未定义的行为。

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

如果你的编译器是沉默的,检查它的文档如何打开额外的警告。

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安装。