gpt4 book ai didi

c++ - 复制构造函数接受 const 引用的行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:23:05 24 4
gpt4 key购买 nike

在下面的代码中,在这一行

A(A& b)

当使用这个编译器时给出错误为

c110.cpp:41: 错误:没有匹配函数来调用‘A::A(A)’

c110.cpp:8:注意:候选人是:A::A(A&)

但是一旦我把它转换成

A(const A& b)

提前很多很多谢谢

没有错误出现。为什么会这样?

Code
class A
{
public:
static int cnt;
A(A& b)
{
cnt++;
cout<<"cnt="<<cnt<<endl;
}
A()
{
cnt++;
cout<<"cnt="<<cnt<<endl;
}
~A()
{
cnt--;
cout<<"cnt="<<cnt<<endl;
}
};



int A :: cnt=0;


A fun(A b)
{
return b;
}


int main()
{
A a;
A b=fun(a);
return 0;
}

最佳答案

const 引用不能绑定(bind)到临时对象。如果您传递临时参数,A& 是非法的,但 const A& 不是。

线

A b=fun(a);

fun(a) 返回的对象进行复制初始化,这是一个临时对象。

此外,复制构造函数不应采用非常量引用,因为从逻辑上讲,您不需要修改要从中复制的对象。

关于c++ - 复制构造函数接受 const 引用的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11327878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com