我定义了一个指向函数的简单函数指针,当我尝试输出它时,求值为1.场景背后发生了什么? (我在mac上,用c ++ 11 g ++编译器编译)
#include <iostream>
int foo()
{
return 5;
}
int main(int argc, char const *argv[])
{
int (*fcptr)() = foo;
std::cout<< fcptr;
return 0;
}
输出为1.
答案 0 :(得分:3)
没有operator<<
的重载需要std::ostream
和函数指针。但是,有一个需要std::ostream
和bool
,并且存在从函数指针到bool的隐式转换。
因此,您的代码将函数指针转换为bool
,如果它不是空指针,则定义为生成true
;然后输出true
,默认情况下定义为输出1
。您可以std::cout<< std::boolalpha << fcptr;
查看true
输出的内容。