显示的构造函数是否算作复制构造函数?
不,它不算作复制构造函数。
它只是一个转换构造函数而不是复制构造函数。
C++03 标准复制类对象
第 2 段:
类的非模板构造函数X
是复制构造函数,如果它的第一个参数是,或类型X&
,并且没有其他参数或者所有其他参数都有默认参数。const X&
volatile X&
const volatile X&
显示的赋值运算符算作复制赋值运算符吗?
不,它没有。
C++03 标准 12.8 复制类对象
第 9 段:
用户声明的复制赋值运算符X::operator=
是类的非静态非模板成员函数,只有X
一个类型为X
、X&
、或的参数。const X&
volatile X&
const volatile X&
在线样品:
#include<iostream>
class Base{};
class Derived : public Base
{
public:
Derived(){}
Derived(const Base &rhs)
{
std::cout<<"\n In conversion constructor";
}
const Derived &operator=(const Base &rhs)
{
std::cout<<"\n In operator=";
return *this;
}
};
void doSomething(Derived obj)
{
std::cout<<"\n In doSomething";
}
int main()
{
Base obj1;
doSomething(obj1);
Derived obj2;
obj2 = obj1;
return 0;
}
输出:
In conversion constructor
In doSomething
In operator=