Class A {
public:
A(int i = 0, int k = 0) {} // default constructor WHY ??
~A() {}
};
int main()
{
A a; // This creates object using defined default
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.