Bu tür bir takas uygulamasını kullanmanın en büyük tehditleri nelerdir? İplik güvenliği ve zayıf optimizasyonun yanı sıra. Ne zaman başarısız olur (counterexample)?Hafızaya şablon, xor ve işaretçiler kullanılarak yapılan çok fazla değiş tokuş
template<typename T>
void swapViaMemory(T& left, T& right) {
if(&left == &right) { return ; }
unsigned int tSize = sizeof(T);
unsigned char* lPtr = reinterpret_cast<unsigned char*>(&left);
unsigned char* rPtr = reinterpret_cast<unsigned char*>(&right);
for(unsigned int i = 0; i < tSize; ++i) {
*(lPtr + i) ^= *(rPtr + i);
*(rPtr + i) ^= *(lPtr + i);
*(lPtr + i) ^= *(rPtr + i);
}
}
dilbilgisi hatalar için yazık
, ve yanlış (=
Bu 'başarısızlık' anlamına gelmedikçe işaretçi üyeleri için geçerli değildir. –
@LucDanton Yanıtı – Praetorian
@Praetorian Ohh'a ekledim. İşaretçiler, takas edilen nesnelerin üyeleri arasında çapraz uçacaklar. – shycha