欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 编程资源 > 编程问答 >内容正文

编程问答

cpp / 拷贝构造函数的参数为什么必须使用引用类型 -ag凯发k8国际

发布时间:2024/10/14 编程问答 25 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 cpp / 拷贝构造函数的参数为什么必须使用引用类型 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

表面原因:编译器无法通过,会报如下错误:

error: invalid constructor; you probably meant ‘cexample (const cexample&)’cexample(cexample ex) //拷贝构造函数

深层次原因是避免拷贝构造函数无限制的递归下去。 

栗子:

#include class cexample {int m_ntest;public:cexample(int x) : m_ntest(x){std::cout << "constructor with argument\n";}cexample(const cexample &ex){m_ntest = ex.m_ntest;std::cout << "copy constructor\n";}cexample &operator=(const cexample &ex){std::cout << "assignment operator\n";m_ntest = ex.m_ntest;return *this;}void mytestfunc(cexample ex){} };int main() {cexample aaa(2); // 输出:constructor with argumentcexample bbb(3); // 输出:constructor with argumentbbb = aaa; // 输出:assignment operatorcexample ccc = aaa; // 输出:copy constructorbbb.mytestfunc(aaa); // 输出:copy constructorreturn 0; }

假设拷贝构造函数是传值的,那么在执行如下代码:

cexample ccc = aaa;

会将 aaa 传值到形参,此时构造形参实例时会调用拷贝构造函数,这就造成了无限地构造下去,直至堆栈耗尽,所以为了避免这个问题的发生,直接从编译器的角度禁用了该问题。

 

参考:拷贝构造函数的参数为什么必须使用引用类型_『小猪呼噜噜』的专栏 -- i write,therefore i am.-csdn博客_拷贝构造函数的参数

(saw:game over!) 

 

 

总结

以上是ag凯发k8国际为你收集整理的cpp / 拷贝构造函数的参数为什么必须使用引用类型的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图