所以我有一个布尔函数:
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。
谢谢!
答案 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安装。