在C++中调用if语句内没有参数的布尔函数

1bqhqjot  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(186)

我想知道,为什么在执行下面的代码块时没有错误?错误应该来自func1块,因为我们调用func2时没有参数。参数传递给func2的是什么?
我还意识到,只有当func2是布尔函数,并且在if语句中调用它时,才会发生这种情况。我知道"-4"不是从main函数传递的,因为输出是"1",而实际上它应该是"0"

#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;
}
cx6n0qe3

cx6n0qe31#

代码没有编译失败的原因是函数到函数指针衰减。
当你只使用函数名时,它会退化成一个指向该函数的指针,然后这个指针可以被转换成bool,如果这个指针指向某个东西,那么它就是true,如果它是一个null指针,那么它就是false
由于指针指向一个函数,它将具有非空值,这意味着表达式的计算结果为true

相关问题