复制构造函数被调用的三种情况------新标准c++程序设计
发布日期:2022-04-04 06:36:20 浏览次数:3 分类:博客文章

本文共 1001 字,大约阅读时间需要 3 分钟。

1、当用一个对象去初始化同类的另一个对象时,会引发复制构造函数被调用。例如,下面的两条语句都会引发复制构造函数的调用,用以初始化c2.

C c2 (c1);C c2=c1;

  这两条语句是等价的。注意第二条是初始化语句,不是赋值语句。赋值语句的等号左边是一个早已有定义的变量,赋值语句不会引发复制构造函数的调用。例如:

C c1,c2;c1=c2;

  "c1=c2;"这条语句不会引发复制构造函数的调用,因为c1早已生成,已经初始化过了。

2、如果函数F的参数是类C的对象,那么当F被调用时,类C的复制构造函数将被调用。换句话说,作为形参的对象,是用复制构造函数初始化的,而且调用复制构造函数时的参数,就是调用函数时所给的实参。

3、如果函数的返回值是类C的对象,则函数返回时,类C的复制构造函数被调用。换言之,作为函数返回值的对象是用复制构造函数初始化的,而调用复制构造函数时的实参,就是return语句所返回的对象。例如:

#include
    
     using namespace std;class A{
     
public:
int v;
A(int n){v=n;}
A(const A &a){v=a.v;cout<<"copy constructor called"<
A a(4);
return a;}int main(){cout< <

 输出结果:

4
   //Dev c++5.9.2copy constructor called4
   //vs2015

  第15行调用了func函数,其返回值是一个对象,该对象就是用复制构造函数初始化的,而且调用复制构造函数时,实参就是第12行return语句所返回的a。复制构造函数在第8行确实完成了复制的工作,所以第15行func函数的返回值和第11行的a相同。

        需要说明的是,有些编译器出于程序执行效率的考虑,编译的时候进行了优化,函数返回值对象就不用复制构造函数初始化了,这并不符合c++的标准。上面的程序在vs2015中会调用复制构造函数,但是在Devc++5.9.2中不会调用复制构造函数。把第11行的a变成全局变量,才会调用复制构造函数。

 

新标准c++程序设计

转载请注明出处

 

转载地址:https://www.cnblogs.com/l2017/p/7773124.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:析构函数的调用------新标准c++程序设计
下一篇:c++内存模型------计算机系统核心概念及软硬件实现

发表评论

最新留言

关注你微信了!
[***.249.68.14]2022年05月22日 13时15分58秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

php中mongodb更新数据类型,Mongodb基本数据类型、常用命令之增加、更新、删除 2019-12-01 15:24:44
matlab gui电机,基于MATLAB GUI的感应电机性能分析界面设计.docx 2019-12-01 15:24:44
oracle查字段中的某一个数据,解析如何查看Oracle数据库中某张表的字段个数 2019-12-01 15:24:44
dbmanage php,index.php 2019-12-01 15:24:44
oracle 11gr2版本gi新增组件,Oracle 11gR2 GI安装时的等效性问题 2019-12-01 15:24:44
Lnmp1..4升级php版本,LNMP 升级Nginx、MySQL/MariaDB、PHP教程 2019-12-01 15:24:42
matlab可以做影像组学吗,影像组学分析与建模工具综述.PDF 2019-12-01 15:24:42
matlab输出一个excel表格,matlab数据输出为excel表格-怎样将MATLAB中的数据输出到excel中... 2019-12-01 15:24:42
php的$_files变量,PHP超全局变量$_FILES 2019-12-01 15:24:43
php生成验证码 feanmy,PHP-RSA加密跨域通讯实战 2019-12-01 15:24:43
openstf mysql_STF:执行stf local失败:Error:Could not locate the bindings file. 2019-12-01 15:24:41
java非法字符uff08_js使用技巧收藏 2019-12-01 15:24:41
java向ubuntu拷贝文件_java 对于文件的操作 2019-12-01 15:24:41
php zip解压,php解压缩zip和rar压缩包文件 2019-12-01 15:24:42
java实例域静态域_java===java基础学习(8)---静态域与静态方法 2019-12-01 15:24:42
java 绘制螺旋线,java-如何创建漩涡/漩涡效果? 2019-12-01 15:24:42
python调用c动态库函数_python3调用C动态库函数 2019-12-01 15:24:39
worldwind java加载3ds_WorldWind Java 版学习:3、配置文件的读取 2019-12-01 15:24:40
access 插入 java_Access java jdbc连接 insert插入的数据 中文乱码解决方案!!! 2019-12-01 15:24:40
java 静态方法的参数_java – 如何在jshell中表示一般多态静态方法的类型参数?... 2019-12-01 15:24:40