Home > other >  What are the differences between "T a", "T a()" and "T a=T()" where T
What are the differences between "T a", "T a()" and "T a=T()" where T

Time:04-25

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.

  • Related