我想知道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)
构造函数。
都是复制构造函数。
类X的非模板构造函数是复制构造函数,如果其第一个参数的类型为X&,const X&,volatile X&或const volatile X&,并且没有其他参数,或者所有其他参数都具有默认参数([[ dcl.fct.default])。[示例:
X::X(const X&)
和X::X(X&,int=1)
是副本构造函数。
我知道
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
参数调用。这就是全部。