Let T
a C class.
Is there any difference in behaviour between the following three instructions?
T a;
T a();
T a = T();
Does the fact that T
provides an explicit definition for a constructor that takes no parameter change anything with respect to the question?
Follow-up question: what about if T
provides a definition for a constructor that takes at least one parameter? Will there then be a difference in behaviour between the following two instructions (in this example I assume that the constructor takes exactly one parameter)?
T a(my_parameter);
T a = T(my_parameter);
CodePudding user response:
T a;
performs default initialization.
T a = T();
performs value initialization.
T a();
does not declare a variable named a
. It actually declares a function named a
, which takes no arguments and whose return type is T
.
The difference between default initialization and value initialization is discussed here.