Class(const Class&c)和Class(Class&c)有什么区别?

时间:2019-12-19 09:43:32

标签: c++ copy copy-constructor

我想知道C ++中Class(const Class & c)构造函数和Class(Class & c)构造函数之间的区别。

class Class
{
public:
    Class()
    {
       cout << "running Class()..." << endl;
    }
    Class(Class& c)
    {
        cout << "running Class(Class& c)..." << endl;
    }
    Class(const Class& c)
    {
        cout << "runing Class(const Class& c)..." << endl;
    }
};

Class的定义如上所述。

我知道Class(const Class& c)是一个复制构造函数。创建新的Class对象时将调用它。例如:

Class c;  // output->running Class()...
Class cc(c); // output->runing Class(const Class& c)...

现在,我想知道何时调用Class(Class& c)构造函数。

2 个答案:

答案 0 :(得分:2)

都是复制构造函数。

class.copy.ctor#1

  

如果类X的非模板构造函数的第一个参数的类型为X&const X&volatile X&const volatile X&,则为副本构造函数,并且没有其他参数,或者所有其他参数都具有默认参数([dcl.fct.default])。   [示例:X​::​X(const X&)X​::​X(X&,int=1)是副本构造函数。

答案 1 :(得分:1)

  

我知道Class(const Class& c)是一个复制构造函数。创建新的Class对象时将调用它。例如:

Class c;  // output->running Class()...
Class cc(c); // output->runing Class(const Class& c)...

不。您的代码actually outputs

running Class()...
running Class(Class& c)...

就可以了:非const参数调用了非{const复制构造函数。这就是全部。