u013648963 2014-05-17 11:44 采纳率: 0%
浏览 2018

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里面的复制构造函数,什么时候调用的?

  • 写回答

1条回答 默认 最新

  • 普通网友 2014-05-17 14:06
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?