我想知道,为什么在执行下面的代码块时没有错误?错误应该来自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;
}
1条答案
按热度按时间cx6n0qe31#
代码没有编译失败的原因是函数到函数指针衰减。
当你只使用函数名时,它会退化成一个指向该函数的指针,然后这个指针可以被转换成
bool
,如果这个指针指向某个东西,那么它就是true
,如果它是一个null
指针,那么它就是false
。由于指针指向一个函数,它将具有非空值,这意味着表达式的计算结果为
true
。