class Base{
public:
Base(){}
private:
Base(const Base &b)
{
cout<<"copytor"<<endl;
}
};
class CB
{
public:
CB(Base &b):pb(&b){}
operator Base&()
{
return *pb;
}
private:
Base *pb;
};
void foo(Base b) { }
int main()
{
Base b;
CB cb(b);
foo(cb);
}
菜鸟问个问题,调用foo不是按值传递的吗,为什么可以调用Base的private里面的复制构造函数,什么时候调用的?
我见过的重载操作符都是operator后直接跟一个操作符,不晓得你的operator Base&()是什么意思?另外foo函数的形参是Base类型,而你传递的是CB类型,后者只是将前者一个指针作为数据成员而已,没有派生关系,你用两个好不想干的类型来从CB类型到Base类型转换,你又想得到怎么样的结果呢?最后Base类型的复制构造函数确实不可访问,你的代码里面一些函数和类都没有具体执行代码或者数据成员,空壳一个,复制构造函数意义全无,从你代码来看,你只想看一个流程,这可能是钻了一个空子但是编译器没有在运行报错而已,不晓得你究竟想要研究什么问题???