c ++函数指针的计算结果为1

时间:2017-08-23 02:48:49

标签: c++ function pointers function-pointers

我定义了一个指向函数的简单函数指针,当我尝试输出它时,求值为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.

1 个答案:

答案 0 :(得分:3)

没有operator<<的重载需要std::ostream和函数指针。但是,有一个需要std::ostreambool,并且存在从函数指针到bool的隐式转换。

因此,您的代码将函数指针转换为bool,如果它不是空指针,则定义为生成true;然后输出true,默认情况下定义为输出1。您可以std::cout<< std::boolalpha << fcptr;查看true输出的内容。