我定义了一个指向函数的简单函数指针,当我尝试输出时,它的计算结果为 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。
最佳答案
operator<<
没有过载这需要 std::ostream
和一个函数指针。然而,有一个需要 std::ostream
和一个 bool
,并且存在从函数指针到 bool 的隐式转换。
所以你的代码将函数指针转换为 bool
,定义为产生 true
如果它不是空指针;然后输出true
,定义为输出1
默认情况下。你可以这样做std::cout<< std::boolalpha << fcptr;
看true
输出。
关于C++ 函数指针的计算结果为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45829867/