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

问题描述 投票:-1回答:2

我想知道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)构造函数。

c++ copy copy-constructor
2个回答
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)是副本构造函数。


0
投票

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

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

实际上,不是。您的代码实际上输出

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

就在这里:非const复制构造函数被非const参数调用。这就是全部。

© www.soinside.com 2019 - 2024. All rights reserved.