2017-07-27 47 views
5

假設我有這樣的代碼:是成員指針爲int的印刷定義

#include <iostream> 

struct Mine 
{ 
    int a; 
    int b; 
}; 


int main() 
{ 

    int Mine::* memberPointerA = &Mine::a; 
    int Mine::* memberPointerB = &Mine::b; 



    std::cout << memberPointerA; 
    std::cout << "\n"; 
    std::cout << memberPointerB; 
} 

當我使用Microsoft Visual C++(2015年)

我得到以下輸出運行此

1 
1 

我期望的輸出更像這樣:

1 
2 

所以這引出了一個問題:這是一個成員指針定義行爲的打印嗎?

回答

12

有一個從指針到bool的定義轉換。由於成員變量指針不是NULL,因此它們評估爲true並打印爲1

+0

哦....這是有道理的(我剛剛意識到這可能會繼續,就像你回答) – DarthRubik

7

手頭的關鍵問題是指向成員的指針不能轉換爲void*,這是通常處理打印指針的過載所需要的。

因此,使用下一個最佳轉換,即轉換指針 - >bool。兩個指針都不是空指針,因此你得到了你看到的輸出。

如果您嘗試打印「正常」指針(而不是指向成員的指針),您會得到一些與最初預期相符的輸出。