allows programs to be written in logical parts.
let us split our programs into several files, each of which can be compiled independently.
To support separate compilation, C++ distinguishes between declarations and definitions. A declaration makes a name known to the program. A definition creates the associated entity.
A variable declaration specifies the type and name of a variable. A variable definition is a declaration is a declaration. In addition to specifying the name and type, a definition also allocates storage and may provide the variable with an initial value.
Variables must be defined exactly once but can be declared many times.
extern
comes inWhen we separate a program into multiple files, we need a way to share code across those files. For example, code written in one file may need to use a variable defined in another file. A file that wants to use a name defined elsewhere includes a declaration for that name.
To obtain a declaration that is not also a definition, we add the extern
keyword and must not provide an explicit initializer:
extern int i; // declares but does not define i;
int j; // declares and defines j
In this case, the extern
signifies the the variable i is not local to this file and that its definition will occur elsewhere.
Any declaration that includes an explicit initializer is a definition. We can provide an initializer on a variable defined as extern
, but doing so overrides the extern
. An extern
that has an initializer is a definition.
It is an error to provide an initializer on an extern
inside a function.
To define a single instance of a const variable, we use the keyword extern
on both its definition and declaration(s). In other words, to share a const
object among multiple files, you must define the variable as extern
.
explicit instantiation a.k.a. extern template
原文:https://www.cnblogs.com/Patt/p/10657830.html