reference引用笔记----C++学习之路
来源:互联网 发布:数控车床如何编程 编辑:程序博客网 时间:2024/05/19 18:12
1.代码例子:
int x = 0;int* p = &x;int& r = x;int x2 = 5;r = x2;int& r2 = r;2.代码分析:
可以直到再memory中x占有一个内存 【int x = 0;】
指针p也占有一个内存【int* p = x;】------>【int x = 0;】
引用r意思是我有一个变量r,她是一个reference,指针p和整数x都占有4个字节,
那么引用r占有多少个字节呢?引用是一种绑定,可以说r代表x。x与r都是0。所以r也是整数。
但是在编译器上引用是依靠指针来实现的。注意:引用一定要有初值。
有个区别就是,指针可以再变换,但是引用绑定之后可不能再变换。就像倒数第二行代码,r不是重新代表,
这个意思就是r绑定的x变成x2的value。
最后一行代码:r2绑定r,也就是绑定x。
3.编译器上:
sizeof(r) == sizeof(x);
&x == &r;
另外:java中的所有变量都是reference。
从另外代码来清楚看到:
typedef struct Stag{ int a,b,c,d;} S;int main(){ double x = 0; double* p = &x; double& r = x; cout<<sizeof(x) <<endl; cout<<sizeof(p)<<endl; cout<<sizeof(r)<<endl; cout<<p<<endl; cout<<*p<<endl; cout<<x<<endl; cout<<r<<endl; cout<<&x<<endl; cout<<&r<<endl; S s; S& rs = s; cout<<sizeof(s)<<endl; cout<<sizeof(rs)<<endl; cout<<&s<<endl; cout<<&rs<<endl;}运行结果:
、
4.reference的常见用途
可以说reference是一种很漂亮的指针,但是几乎再实际用途上,很伤会直接声明一个引用变量。
reference多半用在参数处理上。
假如我们声明三个函数:
void func1(Cls* pobj){ ...........}void func2(Cls obj) {............}void func3(Cls& obj) {..........}调用的情况时:
Cls obj;func1(&obj); 1func2(obj); 2func3(obj); 32和3调用接口相同,但是2传递value会传得慢,3只需要传递一个指针就行了。
5.用途第二点
先看代码:
double imag(const double& im) {....}double imag(const double im) {....} //Ambiguity这两行是不能够并存得,他们得签名是相同得,签名部分就是不含有return type。
如果这两个签名是不同得话,那么就会产生第四点中得2和3中,2和3得函数名是不同,而这里同名函数,如果
同时存在得话,那么编译器会不知道你想调用哪个,因为调用接口是一样得。
那么如果是这样得:
double image(const double& im) const { .....}double image(const double im) {...}这样是能够共存得,因为const是再签名上得。
阅读全文
0 0
- reference引用笔记----C++学习之路
- JVM学习笔记-引用(Reference)机制
- JVM学习笔记-引用(Reference)机制
- Cpp引用Reference-笔记
- C++Primer 学习笔记之指针和引用
- C++笔记6--引用(Reference)
- java Reference 引用学习总结
- Javascript 学习笔记之引用
- C++学习笔记之 引用
- C++ 学习笔记之 引用
- C++ 学习笔记之 引用
- c++之const,reference(引用),
- C++学习笔记之---语言引用学习
- C++之离港篇学习笔记之引用
- C++primer学习笔记--右值引用
- Swift学习笔记16——自动引用计数(Automatic Reference Counting)
- C++之返回值为reference引用的情况---补充(6)《Effective C++》
- C++之通过引用(reference)捕获异常(12)---《More Effective C++》
- 【C#】教程
- mac编译iOS版openssl
- 作业
- Java_MyTomcat
- SGU 326 Perspective (网络流)
- reference引用笔记----C++学习之路
- git config 配置
- 树的子结构
- Java 解析 Json 文件 (把 Json 转化成 String 的方法来解析)
- 十、内部类的认识
- web.xml文件中的7个错误的安全配置
- UnsupportedClassVersionError
- Android Camera 系统架构源码分析(5)---->Camera数据Buf的传递方式及相关类
- svn安装