I frequently come across POD structs in code that are manually zero-initialized with memset
like so:
struct foo;
memset(&foo, 0, sizeof(foo));
I checked the C++11 standard and it says: "An object whose initializer is an empty set of parentheses, i.e., (), shall be value-initialized." Followed by: "To value-initialize a [pod struct] of type T means ... the object is zero-initialized."
So... does this mean you can always safely condense the above code to just the following:
struct foo{};
And have a guaranteed initialized struct as if you had called memset(&foo, 0, ...)
?
If so, then generally speaking, can you safely initialize anything with empty initializers like so:
SomeUnknownType foo{}; // will 'foo' be completely "set" to known values?
I know this wasn't always possible in C++03 (before uniform initialization syntax) but is it possible now in C++11 for any type?