Assuming that your complete program is:
class A
{
};
A a;
Then the answer is "both".
C++ has terminology that is not necessarily the same as that of other languages. Using the C++ terminology, the declaration A a
declares an object a
of type A
.
This declaration is also a definition. The type A
is required to be complete.
[Note: If the type A
was a template specialization (e.g. typedef X<int> A
), that specialization would be implicitly instantiated.]
In the C++ terminology, initialization means to give an initial value for an object. In the example, the object a
will be default-initialized, which may result in no actual initialization being performed.
The dictionary definition of the term "instantiation" is an appropriate way to describe this declaration. The declaration "instantiates" an object a
, which is an "instance" of the class A
.