这是一个程序的片段:
cls fun(cls a)
{
cls v;
v = a.scale(2.0);
return v;
}
int main()
{
cls a(0.0,1.0,2.0);
cls a2;
a2 = fun(a);
return 0;
}
在上面的代码中,假设类“cls”的类定义已经定义了构造函数和“scale”函数。我的疑问是在主函数中我们已经实例化了对象 a2,然后我们将它分配给函数的返回值。那么,为什么在这种情况下会调用复制构造函数?(我正在关注一些资源以了解使用 C++ 的 OOP,并且在那里提到在上述情况下会调用复制构造函数。)
另外,在上面的代码中,如果我写:
cls a2 = fun(a);
然后,根据我的理解,必须调用复制构造函数(因为我们将 a2 实例化为某物的副本)。现在,fun(a)返回一个临时对象,但是复制构造函数的参数需要一个引用值,因为我们不能获取临时对象的引用值,这不应该出错吗?
编译器生成的复制构造函数将const
引用作为参数。
允许匿名临时对象绑定到const
引用,因此编译通过。
需要注意的是通过创建隐含值拷贝return v;
被省略掉在后面的C ++标准。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句