SORU
21 ŞUBAT 2009, CUMARTESİ


Reinterpret_cast ne zaman kullanılır?

reinterpret_cast vs static_cast uygulanabilirliği ile biraz kafam karıştı. Genel kuralları okudum ne kadar bu tür zaman sözcüğünün static derleme yorumlanabilir statik döküm kullanmak için. Bu C derleyici dahili örtülü de fırlatmak için kullanır kalıbı.

reinterpret_cast iki senaryo içinde geçerli, işaretçi türleri ve yardımcısı tamsayı türleri tersini yapın ya da başka bir imleç türü dönüştürme. Ben genel fikir bu unportable ve kaçınılmalıdır.

Biraz kafam karıştı burada ihtiyacım olan bir kullanımdır, C, C arıyorum ve C kodu temelde void* bir tutar kadar C nesne üzerinde tutmak gerekiyor. Ne dökme void * ve Sınıf türü arasında dönüştürme kullanılmalıdır?

static_cast reinterpret_cast hem kullanımı gördüm? Okuyorum ne olsa static döküm derleme zaman olabilir gibi, daha iyi görünüyor? reinterpret_cast başka bir işaretçi türü dönüştürmek için kullandığını söylüyor ama?

CEVAP
21 ŞUBAT 2009, CUMARTESİ


C standardı aşağıdakileri garanti eder:

static_castıng void* için bir işaretçi adresi korur. Yani, aşağıda, a, b ve c hepsi aynı adresi işaret:

int* a = new int();
void* b = static_cast<void*>(a);
int* c = static_cast<int*>(b);

reinterpret_cast sadece farklı bir türü için bir işaretçi döküm, garanti ederve sonra reinterpret_cast özgün bir türorijinal değeri olsun. Aşağıdaki:

int* a = new int();
void* b = reinterpret_cast<void*>(a);
int* c = reinterpret_cast<int*>(b);

a ve c aynı değeri içerir, ancak b değeri belirtilmemiş. (pratikte, tipik bir c olarak aynı adresi içerir, ama bu standartta belirtilen değil, ve daha karmaşık hafıza sistemleri, makineler için doğru olmayabilir.)

Ve void*, static_cast döküm için tercih edilmelidir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jonathan D.

    Jonathan D.

    3 Kasım 2006
  • jpmkm1

    jpmkm1

    4 NİSAN 2008
  • TantalizingTrance

    TantalizingT

    15 ŞUBAT 2009