【C++】拷贝构造函数中的形参是const引用类型的,为何需要引用且为const引用? |
您所在的位置:网站首页 › 形参类型和什么有关 › 【C++】拷贝构造函数中的形参是const引用类型的,为何需要引用且为const引用? |
根本原因
在c++中,传值时就是形参是实参的一份拷贝,传引用时形参和实参是一个东西。 返回类型也一样,返回值则是拷贝一份返回,返回引用则返回同一个东西(注意不要返回局部对象的引用,函数退出时对应的空间已被释放)。 直接原因由于(根本原因)形参是实参的一份拷贝,如果直接传递值给拷贝构造函数而不是传引用,那么形参对象会拷贝实参对象,这个拷贝过程又调用拷贝构造函数(第二次),在第二次调用拷贝构造函数时,形参对象继续拷贝实参对象,继续调用拷贝构造函数(第三次)…陷入死循环。 因此需要传引用给拷贝构造函数。 为何拷贝构造函数要用const引用?在这里没有太复杂的原因,就是为了表明拷贝构造函数中没有对传递进来的对象做任何修改,也是防止拷贝构造函数对对象进行修改,更加严谨安全。实际上不加const也是可以照常运行的,就是不够严谨。养成习惯:不需要改变对象时,传引用时加上const。 为何要用const引用? 将传值换成传const引用可以避免产生临时变量,这样避免就可以减少很多不必要的时间和空间的开销;对右值的引用如果不用右值引用(&&)就必须传递const引用,因为普通引用没法引用右值(字面值常量、临时量等),实际上,不使用常量引用会极大限制函数所能接受的实参类型,因为我们不能把const对象、字面值或者需要类型转换的对象传递给非常量引用;如上所述,保证传递的实参没有被修改,同时也表明函数内不对实参进行修改(对指针的const引用除外,如果只有顶层const,对于指针形参进行const引用依然可以改变指针指向的内存地址存放的内容,可以参考这篇博客)。 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |