打印成员函数的地址

时间:2013-08-04 14:16:48

标签: c++ function member

struct Widget {
    void test() {}
};

int func() {}

int main() {
    std::cout << &Widget::test << std::endl;
    std::cout << Widget::test << std::endl;
    std::cout << func << std::endl;
    std::cout << &func << std::endl;
}

在此代码中,只有第二行main函数无法编译。其他人打印1。为什么打印1。不应该打印功能的地址?为什么第二个不编译但是第一个呢?

1 个答案:

答案 0 :(得分:2)

  

为什么要打印1.不应该打印功能的地址?

没有。 std::cout可以打印void*,但是没有从函数指针类型到void*的隐式转换(既不是常规函数指针也不是指针指向成员类型)。但是,从函数指针类型到bool的转换。这就是我们最终的结果。

  

为什么第二个不编译但是第一个呢?

因为标准要求您使用&来获取成员函数的地址。

相关问题