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
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.
MySQL ile yürütme çok açık değildir ne...
Python Çoklu işlem.Uygulamak, apply_as...
Ko ne zaman kullanılır.formundadır.unw...
Ne zaman Şişeyi.g kullanılır?...
Parcelable nerede ve ne zaman describe...