在 C++ 中的 if 语句中调用不带参数的布尔函数



我想知道,为什么执行下面的代码块时没有错误?错误应该来自func1块,因为我们在没有参数的情况下调用func2。在论证中传递了什么func2

我还意识到,只有当func2是一个布尔函数,并且在if语句中调用它时,才会发生这种情况。我知道"-4"不是从主函数传递的,因为输出在应该"0"的时候"1"

#include <iostream>
bool func2(int b) 
{
return b>0;
}
int func1(int a) 
{
if (func2) return 1;
else return 0;
}
int main() 
{
std::cout << func1(-4);
return 0;
}

代码没有编译失败的原因是因为函数到函数指针衰减。

当您仅使用函数的名称时,它将衰减为指向该函数的指针。 然后,可以将指针转换为bool,如果指针指向某物,则将true该,如果指针是null指针,则false

由于指针指向一个函数,它将具有非空值,这意味着表达式的计算结果将为true

最新更新