Q:

Why default argument constructor is called as default constructor

Class A {
public:
       A(int i = 0, int k = 0) {} // default constructor WHY ??
       ~A() {}
};
int main()
{
  A a; // This creates object using defined default 
       // constructor but the constructor still has two arguments
  A b(1,2); // Called as parametrized one
}

Why this default argument constructor is default constructor. Why it is not called Parametrized constructor or default parametrized constructor because even if this constructor is called with no arguments it does contain two arguments ?? Is there any specific reason or its just because the standard says so.

A:

C++11 §12.1 Constructors
A default constructor for a class X is a constructor of class X that can be called without an argument.

This is the definition of default constructor. A constructor that supplies default arguments for all its parameters can be called without argument, thus fits the definition.

A:

By definition, a default constructor is one that can be called without arguments. Yours cleary fits that definition, since both parameters have default value.
The asnwer to "why" is, I'd say, simply because C++ standard says so. The choice of constructor to be called is done by overload resolution based on number and types of parameters, just like with other functions.

