SORU
21 Kasım 2008, Cuma


Bir boşluk döküm static_cast veya reinterpret_cast* ne için kullanmalıyım

Hem static_cast ve reinterpret_cast void* döküm için iyi bir işaretçi türü için çalışmıyor gibi görünüyor. Bir iyilik için iyi bir nedeni var mı?

CEVAP
22 Kasım 2008, CUMARTESİ


Gerekirdeğilreinterpret_cast kullanın. void* bazı işaretçi döküm (void beri 5.2.10/7 nesne türü değil. reinterpret_cast kullanılmasına izin verilmez IMHO bu geçerli bir yol olmadığını, bazı Derleyiciler teşhis) bile okuyacaksın. reinterpret_cast gerektiğinde platform bağımlı kod yazarken alakasız bir işaretçi türleri arasında döküm için kullanılabilir.

Bir nesneye bir işaretçi açıkça farklı türde bir nesne için bir işaretçi dönüştürülebilir. Dönüştürme dışında bir rvalue of type "işaretçi T1" tip "işaretçi T2" (burada T1 ve T2 nesne türleri ve nerede uyum şartları T2 hayır daha sıkı daha bu T1) ve geri onun orijinal türü verimleri özgün işaretçi değeri, neden böyle bir işaretçi dönüşüm belirtilmemiş.

Başka bir şey için void* atmak istiyorsanız, static_cast kullanabilirsiniz. Standart açıkça bu sağlar. (Aynı değil) başka bir türü için bir tür arasında void* kullanarak dönüştürme belirtilmemiş gösterici bir değer verecektir. Platform bağımlı kod yazmak gerekir, Ancak bazen bu kaçınılmaz bir şeydi.

Yazın bir rvalue "void cv için işaretçi" açıkça nesne türü için bir işaretçi dönüştürülebilir. Yazın “işaretçi cv void” ve özgün işaretçi türü için özgün değere sahip olacaktır. dönüştürülen nesne için işaretçi değeri


Güncelleme: Komite C 0 void* ve reinterpret_cast<> izin verecek. Issue #1120 bkz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Eric Enge

    Eric Enge

    2 Kasım 2009
  • hoorahjencar

    hoorahjencar

    6 HAZİRAN 2007
  • macpulenta

    macpulenta

    9 EYLÜL 2006