两个构造函数,默认情况下?

Sum*_*812 2 c++ constructor class

好的,我有一个非常简单的任务.

我为类Person提供了这两个构造函数:

Person( const string &, const string &, const string & );
Person( const string &, const string &, const string &,
const string & );
Run Code Online (Sandbox Code Playgroud)

我有4个默认值

其中哪些将成为默认构造函数?它总是最具争议的一个或它是如何工作的?

Vla*_*cow 9

根据C++标准

4类X的默认构造函数是类X的构造函数,可以在没有参数的情况下调用.

从您的帖子中不清楚您所说的默认值.您的声明都不是默认构造函数.

如果您在声明中谈论默认参数

Person( const string & = "", const string & = "", const string & = "",
const string & = "" );
Run Code Online (Sandbox Code Playgroud)

然后,此声明是默认构造函数的声明,因为它可以在没有任何显式指定的参数的情况下调用.

有趣的是,同一构造函数可以同时是默认构造函数和非默认构造函数.至少C++标准没有说任何禁止这一点的内容.

例如

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.
Run Code Online (Sandbox Code Playgroud)


das*_*ght 6

这两个构造函数都不是默认构造函数.

默认构造函数是您可以在没有参数的情况下调用的构造函数 - 因为

  • 构造函数没有参数,或
  • 它的所有参数都有默认值.

示例中的两个构造函数都要求将参数传递给它们,因此它们都不是默认参数.