2014-10-30 20 views
23

Aşırıya kaçan aşırı yüklü operator& sınıfına sahibim. Bu tür nesneler new kullanılarak oluşturuldu, bu yüzden değişkenin adresi erişilebilir oldu ancak şimdi statik nesne kullanmam gerekiyor. Adresini almak mümkün mü?C++ operatörsüz değişkenin adresini alın &

+1

* unary * 'operator &' aslında aşırı yüklü mü? –

+0

@FredLarson Ben de şaşırdım: http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Member_and_pointer_operators – KugBuBu

+0

@KugBuBu: Evet, aşırı yüklenebileceğini gördüm. Ancak, bu davada aslında aşırı yüklü olan soru açık değildir. Sınıfları aşırı yükledim 'operator & '(dize birleştirme için). Tek operatöre aşırı yüklenme olağandışı bir durum. –

cevap

37

kullanabilir C++ 11 ya da üstü, std::addressof(object), <memory> başlık tarafından beyan etti.

Tarihsel olarak, özellikle const ve volatile niteleyicileriyle anlaşma yapmak istediğinizde daha da garipti. addressof ait Boost uygulanması kullandığı bir olasılık

reinterpret_cast<T*>(
    &const_cast<char&>(
     reinterpret_cast<const volatile char &>(object))) 

reinterpret_cast ancak object nitelikli olduğunu çalışacak şekilde char& için dönüştürülürken qualifer ekleyerek ilk; daha sonra bunları kaldırmak, böylece son dönüşüm işe yarayacaktı; son olarak adresi alıp, doğru türe dönüştürerek. T, object ile aynı niteleyicilere sahip olduğu sürece (object'dan çıkarılan bir şablon parametresi olacaktır), sonuç gösterici doğru olarak nitelendirilecektir.

+8

Ayrıca, std :: addressof' GCC – Brian

+1

tarafından uygulanmaktadır ve VC++ için hemen hemen aynı uygulama. – Niall

İlgili konular