PODs allow the compiler to do certain optimizations. As a rule of thumb, a type is POD if the compiler is allowed to treat the struct
the same way as a C-compiler would.
In particular, when initializing a POD struct, the compiler just needs to reserve memory of the appropriate size, it does not need to worry about initialization. Initialization can be requested explicitly by the programmer, but it never happens implicitly as could be the case with a user-defined constructor.
For example, a user-defined default constructor might require the data to get initialized to 0. In general, the default constructor might even have arbitrary side effects that the compiler needs to consider.