Having defined a class A with several constructors and a default constructor the statement A a( x ); calls the corresponding constructor, given it is defined, depending on the type of x. Hence you could guess that A a( ); should call the default constructor as it is defined with empty brackets A::A( ){}. But you must write A a; without brackets instead of A a(); even if the syntax without brackets doesnt fit smoothly into the general syntax of constuctor calls. Could somebody please give some insight why the syntax is defined this way? Thanks!
If something can be a function declaration it is a function declaration.
When you write A a(); the compiler will treat this as a function declaration of a function named a that takes no arguments and returns an A object.