Sometimes you need to clear all the members of a struct after it was used. With large structs, you usually use memset() for that purpose. However, for smaller structs that occupy 2, 4 or 8 bytes of memory, calling memset() is rather expensive in terms of performance:
}; // Date occupies 4 bytes
d.day = 13; d.month = 4; d.year = 2000; // use d
memset(&d, 0, sizeof (d)); // now clear it
You can avoid the overhead of calling memset() by using the following technique instead:
// convert a pointer to d to a pointer to int
int * pfake = reinterpret_cast <int*> (&d); // 1
// assigns all d's members to zero through fake ptr
*pfake = 0; // 2
The first line of code creates a pointer to int (assuming 32-bit int size) that actually points to a Date object, d. Of course, cheating is necessary to convince the compiler to accept this conversion. This is why reinterpret_cast is used. The second line dereferences that fake int pointer and writes the value 0 to its memory block. This ensures that all the bits in d are set to zero.
You can perform this two-step operation in a single statement like this:
*( reinterpret_cast <int*> (&d) ) = 0;
However, this is less readable and more error prone.