设为首页 加入收藏

TOP

C++构造函数:函数参数传递(一)
2014-07-19 22:52:57 来源: 作者: 【 】 浏览:108
Tags:构造 函数 函数参数 传递

  在讨论C++函数参数之前,我们先来看一下C程序是如何调用函数的。

  如图,为C语言的函数调用记录,C++也类似。当有如下函数:

  void foo(X x0);

  如果有如下调用方式:

  X xx;

  foo(xx);

  编译器(对于C)会将实参xx以“位逐次拷贝”方式复制给形参x0(注:X0即在上图函数活动记录中的参数位置)。在C++中,如果一个Class也展现了“位逐次拷贝语义”【1】,且用户没有定义拷贝构造函数,那么编译器按照这种方式进行拷贝没有问题。但是当一个Class不展现“位逐次拷贝语义”的情况(四种),或者用户定义了拷贝构造函数呢 这种情况编译器必须采用一定措施避免这种直接位拷贝的发生(否则拷贝构造函数将不能发生作用)。C++编译器是这样做的:

  调用函数前,先引入一个X的临时变量temp,并以实参xx为参数调用拷贝构造函数(这由编译器安插代码完成)。如:

  X temp;(此处不调用构造函数,只分配空间)

  temp.X::X(xx);(这两行代码是由编译器插入)

  之后怎么办呢 如果直接foo(temp),问题又回到之前了,因为只是相当于temp变成了实参,实参到形参x0的拷贝依然是“位逐次拷贝”。所以C++编译器必须做第二个转化,即修改函数foo的声明,将其修改为:

  void foo(X& x0);

  即函数参数变为引用,传入的将是temp的地址。

   

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言指针讲解 下一篇AVL树C语言完整实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·CPython是什么?PyPy (2025-12-26 06:50:09)
·Python|如何安装seab (2025-12-26 06:50:06)
·python要学习数据分 (2025-12-26 06:50:03)
·每日一道面试题-多线 (2025-12-26 06:20:17)
·java项目中哪些地方 (2025-12-26 06:20:14)