----------------------------- Scott Meyers*Third Edition------------------------------------
If you follow all the guidelines all the time, you are unlikely to fall into the most common traps surrounding C++, but guidelines, by their very nature, have exceptions. That's why each Item has an explanation. The explanations are the most important part of the book. Only by understanding the rationale behind an Item can you reasonably determine whether it applies to the software you are developing and to the unique constraints under which you toil.
A declaration tells compilers about the name and type of an object, function, class, or template, but it omits certain details.
A definition, on the other hand, provides compilers with the details. For an object, the definition is where compilers allocate memory for the object. For a function or a function template, the definition provides the code body. For a class or a class template, the definition lists the members of the class or template.
extern int x;//object declaration
int x;//object definition
Initializationis the process of giving an object its first value. For objects of user-defined types, initialization is
performed by constructors. A default constructor is one that can be called without any arguments.
Such a constructor either has no parameters or has a default value for every parameter.
Constructors declared explicitare usually preferable to non-explicit ones, because they prevent compilers from
performing unexpected (often unintended) type conversions. Unless I have a good reason for allowing a constructor
to be used for implicit type conversions, I declare it explicit. I encourage you to follow the same policy.
Effective C++ programmers do their best to steer clear of undefined behavior
int *p=0;//p is a null pointer
std:cout<<*p;//dereferencing a null pointer