拷贝构造函数的形参必须是 为什么复制构造函数的形参必须是一个引用?
为什么复制构造函数的形参必须是一个引用?
使用引用参数复制构造函数的一个重要原因是避免递归调用!从语言规范的角度来看,这只是一种规则。例如&B=a表示B是对a的引用。从逻辑角度看,参数的传递本身就是一个副本。如果不使用引用类型,则当复制构造函数传递参数时将调用复制构造函数,从而导致递归调用。因此,它是通过引用类型传递的。
为什么复制构造函数的形参必须是一个引用?
复制构造函数实际上是一个函数。如果将参数定义为类型而不是类型引用,它将首先调用该类型的复制构造函数并重构一个新实例,就像下面的示例类MyClass一样。这是一个简单的类{}int fun(MyClass a)//这是一个函数。调用时,编译器会自动调用MyClass类型的构造函数,并重新实例化MyClass int fun(MyClass&;AMPA)//此函数不会调用MyClass类型的构造函数,只需传递一个指针~现在回到您的问题,赋值构造函数也是一种构造函数,你给它一个非引用、非指针的参数,它会调用这种类型的构造函数,这很好~一个函数不断地调用自己,这样它就不会出错,就不会堆栈溢出了,是吗?简单来说,事情是这样的:intfun(MyClass a){fun(a)}//你认为这个函数有一天会结束吗?
通常类的拷贝构造函数的参数是什么?
复制构造函数使用类的对象为类的另一个对象赋值,因此构造函数的参数就是类的对象。Class a{public:a(const a&a)//复制构造函数;}add const防止复制构造函数修改形式参数的值;add reference避免实际参数传递给形式参数时复制值,提高效率。
拷贝构造函数的形参必须是 构造函数形参直接赋值可以吗 拷贝函数和拷贝构造函数
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。