2013-08-04 100 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的轉換。這就是我們最終的結果。

爲什麼第二個不編譯,但首先呢?

因爲該標準要求您使用&來獲取成員函數的地址。