c++引用的相关总结
2018-03-13 18:03
351 查看
c++引用的的相关总结
在c++中新增加了一个语法,叫引用。 引用是给一个已经定义好的变量取别名,这个别名本身并不创建空间。
一. 引用一般的格式是:
类型& 引用变量名=已定义过的变量;
例如: int a=9; int& b=a; 这两句的意思就是:先定义一个变量a,用b对a进行引用,b就是a的一个别名。
若是见到类型后跟一个 & 就是引用的意思,除了这种情况一般就都是取地址的意思。
二. 引用的特点:
1.一个变量可以取多个别名。eg:
int a=9; int & b=a; int & c=a; b,c都是a变量的别名。
-
2.引用必须初始化
- int & b; - 不可以;因为b是引用变量名,没有初始化就不知道是给谁重命名。也没有内容。
3.引用只能在初始化的时候引用一次,不能改变为再引用其他的变量。
不能再引用其他变量指的是不能再做其他变量的别名,但是可以通过它改变被引用的变量的值。
三. 在引用中有一个比较重要的是被const修饰的引用。
若是被const修饰的变量,其引用就也要用const修饰const int a=20;
要想引用这个a就必须要用const引用
const int& b=a;
还有要给常量取别名,也得必须用const修饰来引用。因为常量是不能被改的
const int & b=20;
int d=10; ①float e=d; ②float& f=d;
上面有①②两种情况,是不是都可以编译成功呢?
4000
①是c语言中的语法,隐式的类型转换。是可以的,能够运行的。
②float& f=d;错误
因为现在不是直接给d取别名,而是给中间的临时变量取别名,而中间的临时变量是个常量,所以不能直接用float&引用,而是需要用const float&引用。
四. 引用作为参数
这里我们需要比较一下各种方式的传参数。1.值传递,如果形参不是用引用的传值方式,则就需要生成局部临时变量接受实参的值,在这个局部变量的生命周期到了之后,这个局部变量的值消失,并不能改变实参的值。
void swap(int a,int b);
2.若是需要改变实参的值,则就需要用指针传值,将实参的地址给生成的局部指针变量,可以直接在函数中对实参进行操作,可以读写,可以修改。
void swap(int *a,int *b);
3.引用传值,是对实参进行引用,不需要重新开辟空间,不用创建临时变量,而是直接可以对其操作。若是不想要实参的值被改变,就需要用const进行修饰,避免在函数内将实参的值改变了。
void swap(int& a,int& b); void swap(const int& a,const int& b);
五. 引用做返回值
1)传值做返回值int Add(int x,int y)
传值返回的方式
2)传引用做返回值
int& Add(int x,int y);
传引用的优点就是,可以不用创建临时变量,节省空间,但是也有缺点返回值非法。
那传引用返回是不是就没有存在的意义呢?
并不是,若返回值当出了函数,作用域没有消失,则就可以使用引用返回。比如当返回值为静态变量时。
六. 深入理解引用
这是直接的赋值。这里是将b的内容放入到eax寄存器中.
语法上说引用并不需要创建临时变量,可是在汇编语句上能看出引用的实现是这样的一个过程:将被引用的 b 变量的地址给寄存器eax,再将eax中内容给a变量.
所以引用是在语法上不需要创建临时变量,但是在底层汇编实现上还是创建了变量的。
最后总结一下指针与引用的区别与联系
1.虽然引用的符号与取地址的符号相同但是并不是取地址的意思。
2.引用必须得初始化,而且只能被初始化一次,之后不能再改变去引用其他变量,指针就可以改变指向。
3.引用必须指向有效的变量,但是指针可以为NUll。
4.sizeof指针对象和引用对象的意义也不一样,sizeof引用得到的是所指向的变量的大小,而sizeof指针是对象地址的大小。
5.指针和引用自增自减的意义的也不同,指针自增自减一次加或减所指类型的大小,而引用是对数本身加1或减1。
6.相对而言,引用比指针更安全,指针需要判空,空指针的解引用还有野指针,内存泄漏等问题。
相关文章推荐
- C++中const和引用修饰变量和函数的总结
- Android NDK的C++ STL开发相关总结
- 引用 C++ int,char,string,CString类型转换(整理总结)
- C++ 引用 乱七八糟的总结
- C++中引用符号“&”的作用总结
- C/C++中指针和引用之相关问题研究
- C++中指向派生类的基类指针、基类引用的一点总结
- C/C++之函数返回值为指针或者是引用时常见错误总结
- C++中typedef、const、预处理等相关知识总结
- C++中引用&的相关知识
- C/C++中指针和引用之相关问题研究
- c++ 引用 & 用法总结
- c++中两个类相互包含引用的相关问题
- c++引用总结
- C++中值传递、指针传递、引用传递的总结(zz)
- VS10 C++ 引用第三方库总结
- C/C++中指针和引用之相关问题研究
- C++中const及引用相关
- C/C++中指针和引用之相关问题研究