c++不可复制对象按值传递调用函数

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类型的复制构造函数确实不可访问,你的代码里面一些函数和类都没有具体执行代码或者数据成员,空壳一个,复制构造函数意义全无,从你代码来看,你只想看一个流程,这可能是钻了一个空子但是编译器没有在运行报错而已,不晓得你究竟想要研究什么问题???