什么情况下调用拷贝构造函数 下列情况中,不会调用复制构造函数的是()?
下列情况中,不会调用复制构造函数的是()?
编译器优化。例如,编译器知道返回了临时对象,而编辑器直接将其放入要返回的堆栈中。程序直接从堆栈返回结果,其中保存了一个复制构造
这是C常用的优化方法
关键字explicit可以防止“单参数构造函数”被用于自动类型转换(隐式类型转换)
class test{
private:
int data
public:
test(int data=0){}
test(const test&RHS){}]}
如果没有显式,测试s=4可以编译并通过
但是有显式,测试(4)不是必需的
那么复制构造函数的定义是什么?也就是说,构造函数的参数属于这种类型。只要此类型的对象用于初始化同一类型的其他对象,将调用复制构造函数。
例如:
test a=4//此处不会调用复制构造函数
test B=a//此处将调用复制构造函数
因此复制构造函数中没有隐式类型转换问题,因此不需要显式
复制构造函数的一个重要原因带参考参数是为了避免递归调用!从语言规范的角度来看,这只是一种规则。例如&B=a表示B是对a的引用。从逻辑角度看,参数的传递本身就是一个副本。如果不使用引用类型,则当复制构造函数传递参数时将调用复制构造函数,从而导致递归调用。因此,它是通过引用类型传递的。
为什么复制构造函数不添加explicit前缀?
方法仍有问题。构造函数包括复制构造函数。在创建对象时调用构造函数。关键词:创建时,a是形式。指针类型仅在新建时调用复制构造函数。它也是构造器。当用一个对象作为参数创建另一个对象或赋值(同样关注创建)时,例如C中的a(b)a b a=b,以下三种对象需要调用复制构造函数(有时也称为“复制构造函数”):
1)对象用作函数参数并传递到函数体中以值传递的方式;
2)对象用作函数的返回值,并通过值传递从函数返回;
3)对象用于初始化另一个对象(通常称为赋值初始化);-直接调用函数和定义后续调用有什么区别?很难说编译器在复制S1时调用了S2复制方法。
为什么复制构造函数的形参必须是一个引用?
复制构造函数实际上是一个函数。如果将参数定义为类型而不是类型引用,它将首先调用该类型的复制构造函数并重构一个新实例,就像下面的示例类MyClass一样。这是一个简单的类{}int fun(MyClass a)//这是一个函数。调用时,编译器会自动调用MyClass类型的构造函数,并重新实例化MyClass int fun(MyClass&;AMPA)//此函数不会调用MyClass类型的构造函数,只需传递一个指针~现在回到您的问题,赋值构造函数也是一种构造函数,你给它一个非引用、非指针的参数,它会调用这种类型的构造函数,这很好~一个函数不断地调用自己,这样它就不会出错,就不会堆栈溢出了,是吗?简单来说,事情是这样的:intfun(MyClass a){fun(a)}//你认为这个函数有一天会结束吗?
什么情况下调用拷贝构造函数 析构函数没有参数 构造函数和拷贝构造函数
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。