C++学习笔记――引用与拷贝构造函数
2009-03-31 10:18
357 查看
1、引用和指针的区别:
引用是别名。必须和具体的对象绑定,在声明的时候初始化,以后不能改变绑定关系;引用不能声明为null类型;
指针是一种变量,它的值为地址,在使用的时候可以改变,也可以赋为null;使用之前必须进行合法性判别。
2、从现有对象生产新的对象时,使用拷贝构造函数。如Class x1,x2=x1;此时x2从现存的x1生成,采用拷贝构造函数。还有就是在传递和返回对象时,使用拷贝构造函数。
函数在返回或传递简单类型变量时,一般采用按值传递,但对于对象或者结构等比较复杂的参数时,编译器调用对象的拷贝构造函数。没有自定义的则编译器使用默认的拷贝构造函数。强制不使用拷贝构造函数传值,则必须将其声明为private。
3、函数调用框架:
调用函数时,编译器首先将参数压栈;然后调用函数,此时必须先将函数返回地址压栈;在函数内部,将函数的局部变量压栈;执行代码;将返回值压栈。
编译器可以根据距离返回地址的偏移值访问返回值和局部变量。返回地址保存在EBP寄存器(基址)中。
对象等数据结构比较复杂,直接在堆栈中返回会产生“重入”问题,最佳的方法是将返回值的地址压栈,函数直接将返回值信息拷贝到目的地。
4、Class X;
X f(X param)
{return param};//这种情况下要调用两次拷贝构造函数。
首先,将param对象作为参数传递时,要按值传递,调用拷贝构造函数。
然后,将param 对象作为返回值传递时,调用拷贝构造函数,按值返回对象
【临时对象】,执行语句f();时,f的返回值会先产生一个临时对象,保存在内存某一个地址中,而且临时对象是常量,试图改变它的行为是非法的。如,将其作为左值赋值的行为是错误的。
5、函数指针判定:按照“右左右……”的判断顺序进行判定。比如
float (*(*fp2)(int))[10];
从中间的fp2开始,
向右“)”,返回;
向左“*”,fp2是一个指针;
向右“(int)”,函数参数列表,fp2是一个函数指针,返回什么?
向左,“*”,返回值是一个指针,指向什么?
向右,“[10]”,长度为10数组,指针指向长度为10的数组,什么类型的数组?;
向左,“float”,数组是float类型的。
总结 fp2是一个函数指针,参数为Int类型,返回指向float类型数组的指针。
引用是别名。必须和具体的对象绑定,在声明的时候初始化,以后不能改变绑定关系;引用不能声明为null类型;
指针是一种变量,它的值为地址,在使用的时候可以改变,也可以赋为null;使用之前必须进行合法性判别。
2、从现有对象生产新的对象时,使用拷贝构造函数。如Class x1,x2=x1;此时x2从现存的x1生成,采用拷贝构造函数。还有就是在传递和返回对象时,使用拷贝构造函数。
函数在返回或传递简单类型变量时,一般采用按值传递,但对于对象或者结构等比较复杂的参数时,编译器调用对象的拷贝构造函数。没有自定义的则编译器使用默认的拷贝构造函数。强制不使用拷贝构造函数传值,则必须将其声明为private。
3、函数调用框架:
函数参数 |
返回地址 |
局部变量 |
编译器可以根据距离返回地址的偏移值访问返回值和局部变量。返回地址保存在EBP寄存器(基址)中。
对象等数据结构比较复杂,直接在堆栈中返回会产生“重入”问题,最佳的方法是将返回值的地址压栈,函数直接将返回值信息拷贝到目的地。
4、Class X;
X f(X param)
{return param};//这种情况下要调用两次拷贝构造函数。
首先,将param对象作为参数传递时,要按值传递,调用拷贝构造函数。
然后,将param 对象作为返回值传递时,调用拷贝构造函数,按值返回对象
【临时对象】,执行语句f();时,f的返回值会先产生一个临时对象,保存在内存某一个地址中,而且临时对象是常量,试图改变它的行为是非法的。如,将其作为左值赋值的行为是错误的。
5、函数指针判定:按照“右左右……”的判断顺序进行判定。比如
float (*(*fp2)(int))[10];
从中间的fp2开始,
向右“)”,返回;
向左“*”,fp2是一个指针;
向右“(int)”,函数参数列表,fp2是一个函数指针,返回什么?
向左,“*”,返回值是一个指针,指向什么?
向右,“[10]”,长度为10数组,指针指向长度为10的数组,什么类型的数组?;
向左,“float”,数组是float类型的。
总结 fp2是一个函数指针,参数为Int类型,返回指向float类型数组的指针。
相关文章推荐
- C++ 学习笔记(13)拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符、析构函数、右值引用、引用限定符
- C++学习笔记 指针与引用的区别
- c++学习笔记-------《c++自学通》第十二章 高级引用和指针
- C++学习笔记三——内联、宏和引用变量
- c++学习笔记--指针和引用的比较
- C++学习笔记之——引用 内联函数
- C++学习笔记,指针变量的引用与引用的指针
- C++学习笔记(13)——利用对象、引用、指针调用虚函数
- 【从C到C++学习笔记】引用/const引用/引用传递/引用作为函数返回值/引用和指针的区别
- C/C++中关于地址、指针和引用变量的学习笔记(五) : 指针
- C/C++中关于地址、指针和引用变量的学习笔记(六) : const和void
- C/C++中关于地址、指针和引用变量的学习笔记(九) : 内存结构
- C++学习笔记之---语言引用学习
- C++ 学习笔记之 引用
- c++ 学习笔记 c++ 引用C库注意点:#ifdef __cplusplus 倒底是什么意思?
- 笔记:C++学习之旅---引用
- 【C++】学习笔记四十——引用变量
- 关于C++引用运算符&的若干学习笔记
- C++学习笔记-4-引用
- C++学习笔记1-const引用