Two constructors, which is default?

后端 未结 6 1515
深忆病人
深忆病人 2020-12-12 02:29

Okay I got a pretty simple assignment.

I got these two constructors for class Person:

Person( const string &, const string &, const string &a         


        
6条回答
  •  天涯浪人
    2020-12-12 02:54

    According to the C++ Standard

    4 A default constructor for a class X is a constructor of class X that can be called without an argument.

    From your post it is not clear what default values you are speaking about. Neither of your declarations is the default constructor.

    If you are speaking about default arguments as in the declaration

    Person( const string & = "", const string & = "", const string & = "",
    const string & = "" );
    

    Then this declaration is a declaration of the default constructor because it can be called without any explicitly specified argument.

    It is interesting to note that the same constructor can be a default constructor and a non-default constructor at the same time. At least the C++ Standard does not say anything that forbids this.

    For example

    struct A
    {
       A( int x );
       int x;
    };
    
    A a1; // error: there is no default constructor
    
    A::A( int x = 0 ) : x( x ) {}
    
    A a2; // well-formed there is a default constructor.
    

提交回复
热议问题