2017-07-27 31 views
5

varsayalım Bu kodu vardır tanımlanmış mı:int için üye işaretçisi baskı

#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; 
} 

Bu Microsoft Visual C++ (2015)

aşağıdaki çıktı üretmesi olsun ile çalıştırdığınızda

1 
1 

1 
2 
:

beklediğim çıkış Bunun gibi daha bir şeydir

Yani bu soruya şöyle cevap veriyor: Bir üye işaretçisinin bu baskısı davranışını tanımladı mı?

cevap

12

İşaretçiden bool'a kadar tanımlı bir dönüştürme var. Üye değişken işaretçileri NULL olmadığı için doğru olarak değerlendirir ve 1 olarak yazdırır.

+0

Oh .... bu mantıklı (Ben bunun sadece cevapladığınız gibi devam ettiğini fark ettim) – DarthRubik

7

Eldeki önemli sorun, bir işaretçinin üyeye void* dönüştürülememesidir; bu, genellikle yazdırma işaretleyicilerinin üstesinden gelen aşırı yüklenme işlemidir. Böylece, bir sonraki en iyi dönüşüm, dönüştürme işaretçisi olan>bool. Her iki gösterici de boş gösterici değildir, böylece gördüğünüz çıktıyı alırsınız.

"Normal" işaretleyicileri (üye işaretçilerinin karşıtı olarak) yazdırmayı denerseniz, başlangıçta beklediğiniz şeylerin çizgileri boyunca bir çıkış elde edersiniz.