24-01-2017, 02:21 PM
C++ has the concepts:
The term "non-zero initialization" is not defined anywhere.
The declaration `pod` is clearly compliant with Rule 8-5-2.
What about `udc`? If it is classified as "non-zero initialization", Rule 8-5-2 would require an explicit initializator for each element:
But maybe "zero initialization" in this rule does not refer to the C++ concept, but instead to the syntactic forms "{}", "{0}" and "{NULL}" ?
- default initialization ("T var;")
Calls the default constructor (if it exists); otherwise the memory is left uninitialized.
- value initialization ("T var = {};")
Calls the default constructor if it exists and is user-defined.
Otherwise, performs zero-initialization and then calls the compiler-generated default constructor (if it exists).
- zero initialization
Roughly equivalent to a memset(..., 0, ...)
The term "non-zero initialization" is not defined anywhere.
Code:
struct POD { int member1; int member2; };
class UserDefinedCtor { public: UserDefinedCtor(); };
struct CompilerDefinedCtor { int member1; UserDefinedCtor member2; };
POD pod[3] = {}; // value initialization that uses zero initialization
UserDefinedCtor udc[3] = {}; // value initialization but does not involve zero initialization
CompilerDefinedCtor cdc[3] = {}; // value initialization that involves both zero initialization and constructor calls
The declaration `pod` is clearly compliant with Rule 8-5-2.
What about `udc`? If it is classified as "non-zero initialization", Rule 8-5-2 would require an explicit initializator for each element:
Code:
UserDefinedCtor udc[3] = { UserDefinedCtor(), UserDefinedCtor(), UserDefinedCtor() };
But maybe "zero initialization" in this rule does not refer to the C++ concept, but instead to the syntactic forms "{}", "{0}" and "{NULL}" ?
<t></t>