引用、指针、普通类型的大小,以及相互转换的分析
转换调用的函数
-
对象不存在,且没有用别的对象来初始化,就是调用了构造函数
-
对象不存在,且用别的对象来初始化,就是拷贝构造函数
-
对象存在,用别的对象来给他赋值,就是赋值函数。
#include <iostream>
using namespace std;
class StructObj
{
public:
StructObj()
{
a = 1;
b = 2;
}
StructObj(const StructObj& obj)
{
printf("copy\n");
this->a = obj.a;
this->b = obj.b;
}
StructObj& operator = (const StructObj& obj)
{
printf("operator =\n");
return *this;
}
int a;
int b;
};
int main()
{
StructObj* pObj = new StructObj();
printf("point to obj \n");
StructObj obj = StructObj(*pObj);//copy
StructObj obj1 = obj;//copy
obj1 = obj;//operator =
printf("end \n");
return 0;
}
应用在结构体或者类中,引用可以当作指针理解,且内存占用大小为4字节(指针大小)。
所谓的引用,指针,类型转换都是调用对应构造函数,比如拷贝构造函数或者赋值函数。引用传参和指针参数汇编代码都一样。