布尔函数与真/假的比较
Boolean function compared with true/false
我有一个布尔函数:
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安装。
- C++自定义比较函数
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 隐式转换为比较函数对象(函子)用于 std::sort 而不是 std::map?
- 为什么 std::stable_sort() 的比较函数的参数必须是设置常量?
- 如何定义集合数组的比较函数?
- 根据比较函数C++对数组进行排序
- 使用自定义比较函数在类内进行列表排序
- 如何更改 std::set 的比较函数?
- 使用类似的比较函数时,在 c++ 中为 std:sort 获得不同的结果
- std::映射服装比较函数和函数/lambda错误
- 在C++排序中为比较函数指定参数
- 使用右值的比较函数
- 为什么比较函数类型需要指定为模板参数?
- 我应该将 lambda 或函子用于比较函数吗?
- 比较函数模板中的 VARTYPE 和 typeid().name / typename
- 如何键入定义一个专门的 std::set 模板,使用特定的比较函数实例化
- 无法在 std::sort 中使用 cdef 函数作为比较函数
- 关联容器,比较函数不是元素类型的一部分吗?
- 标准::lower_bound的比较函数
- 关于如何在 std::sort 和 std::p riority_queue 中使用自定义比较函数的困惑