2013-08-04 46 views
0
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

试试这个http://stackoverflow.com/questions/2064692/how-to-print-function-pointers-with-cout – Jeff

回答

2

为什么打印1.不应该打印函数的地址?

std::cout可以打印void*,但有从函数指针类型void*没有隐式转换(对于既不经常函数指针也不指针到部件类型)。虽然有一个从函数指针类型到bool的转换。这就是我们最终的结果。

为什么第二个不编译,但首先呢?

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