C++愤恨者札记1——类对象作为函数参数的数据传递过程
C++愤恨者札记1——类对象作为函数参数的数据传递过程
C++繁杂的机制,加上枯燥的教科书,再加上无法回避地要使用它,注定要造就一批C++愤恨者。本文作为C++愤恨者札记系列第一篇,从汇编角度,观察类对象作为函数参数时的数据传递过程。
若没有特殊说明,编译器使用的是VC++,反汇编使用的是Windbg.下面是它们的版本号:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Microsoft (R) Windows Debugger Version 6.11.0001.404 X86
测试代码如下:
#include <iostream>using namespace std;class Node{public:Node(){}Node(Node& n){/*啥都不做*/}int data;};void ShowNodeData( Node n){cout << n.data << endl;}void main(){Node n;n.data = 100;ShowNodeData(n);//参数得不到初始化}- 3楼zwvista11小时前
- 总结的没问题,不过缺乏代表性,感觉缺乏对C++的系统学习
- Re: TMS_LI11小时前
- 回复zwvista确实没有系统看过,哪不懂逆哪。
- 2楼template_cplus前天 10:55
- 首先像博主致敬(我比较崇拜汇编的人)博主应该是刚学c++吧n程序给的例子都是浅拷贝 也就是都是栈区的数据 并没有把深拷贝例子放上去反汇编 所以 结论总结有待商榷 呵呵
- Re: TMS_LI12小时前
- 回复template_cplus深拷贝是拷贝构造函数里面的事,你爱怎么拷就怎么拷,不拷也行。与参数传递过程无关。
- 1楼zwvista前天 09:23
- 1 类对象做为函数参数时,是被存放在栈上的,不影响实参的数据n这句话里有两个观点na 类对象做为函数参数时,是被存放在栈上的n原因: C++奉行值语义,类对象和int之类的基本类型相同,都属于值类型,是存放在本地的。这里类对象虽然被用作函数参数,但实际上它与本地声明的类对象没有什么不同,在函数内部都存放在栈上的。nb 类对象做为函数参数时,不影响实参的数据n原因: C++奉行值语义,类对象和int之类的基本类型相同,作为参数被传递时同样缺省采用值传递,即采用拷贝实参的方式传递参数,因此实参的数据不会受影响n总结:C++与C一脉相承,采用值语义,语言实现尽量做到让用户自定义的类型(以类为代表)与基本类型在使用上没有本质区别,这是C++的基本理念之一。