C++引用
来源:互联网 发布:淘宝led灯外发加工真假 编辑:程序博客网 时间:2024/05/21 03:28
C++引用
一. 引用变量
int x = 3;int& xRef = x;//xRef就是x的另一个别名,使用xRef就是使用x当前值//对xRef赋值会改变x的值
创建一个引用时必须总是初始化它,但是对于类而言,需要在构造函数初始
化列表中初始化引用数据成员。
int& xRef; //error, 无法在类外声明一个引用而不初始化它
不能创建对未命名的值的引用,除非这个引用是一个const的值。
int& unnameref = 1; //errorconst int& unnameRef = 1; //ok
在引用初始化后无法改变引用所知变量,而只能改变变量的值。
指针的引用和指向引用的指针
int* pInt;int*& pRef = pInt;pRef = new int;*pRef = 5;
可以引用‘数组’,但‘引用数组’是非法的
int a[5];int(&b)[5](a);//ok/*引用数组*/int a=0,b=1,c=2;int& ra=a;int& rb=b;int& rc=c;int& a[3] = {ra,rb,rc}//error.非法的
二. 引用参数
C++默认的参数传递机制是按值传递: 函数接受参数副本,修改这些副本时,原参不 变。
引用允许作为函数的参数:按引用传递,如果引用被修改原参变量也会被修改。
void swap(int& a, int& b){ int temp = a; a = b; b = temp;}
可以这样使用它们
int x=1, y=2;swap(x, y);
就像常量无法初始化普通引用一样,不能将常量作为原始参数传递给引用形参
swap(1, 2);//error
三. 引用作为返回值
第一个原因是提高效率。返回对象的引用而不是返回整个对象可以避免不必要的复制
只有在涉及的对象在函数终止之后仍然存在的情况下才能使用。
第二就是 将返回值直接赋为左值,
int& add(int& a, int& b){ a = a + b; return a;}int main(){ int a = 1, b = 2; add(a, b) = 2;}
这种情况在运算符重载的灰经常使用。
四. 引用和指针
相比而言,引用可以使得程序整洁易于理解,且不存在无效的引用,也不需要显示
的解除引用。
大多数情况下应该使用引用而非指针,只有在需要改变所指地址时才需要 使用指针
因为无法改变引用所指的对象。
五. 引用函数指针
int add(int a, int b){ return a+b;}int main(){ int(*p)(int a, int b)(add); std::cout << p(1, 2) << std::endl; int(* const &rp)(int a, int b)(p);//引用函数指针 std::cout << rp(1, 2) << std::endl;}
六. 右值引用
左值:可以获取地址的一个量
右值:所有不是左值的量,o(^▽^)o,例如常量值,临时值等
int a=1, b=2;//a+b 就是一个右值int& c = a+b;//error, 常量无法初始化普通引用int&& d = a+b; //ok,右值引用
int getdata(int&& num){ return num;}int main(){ int a = 1, b = 2; cout<<getdata(a+1)<<endl;//可以这样 cout<<getdata(1)<<endl;//也可以这样 cout<<getdata(move(a))<<endl;//还可以这样 //move()的作用就是把左值转换为右值 }
0 0
- 引用(c++)
- C++----引用
- c++-引用
- C ++ 引用
- 【c++】引用
- 【c++】引用
- C++:引用
- C++:引用
- C/C++:C++引用
- 【c/c++】const引用
- 【C/C++】c++弱引用 强引用
- 枚举 c#(引用)
- 数组引用(C++)
- C++_引用
- c语言中的引用
- (Linux,c++)引用
- 引用(C++)
- objective-c 引用计数
- DIY系列之Web浏览器(4)——css
- 点击使其两秒过后放大
- GoldenGate 使用reperror进行错误处理
- 避免service被杀死
- Unity5 音效一
- C++引用
- SDK学院--易接网游SDK中间件接入使用说明-Unity3D游戏接口
- Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚
- Mahout之推荐算法基本实例
- UIScrollView 多图片间距
- ajax同步
- 错误: 找不到或无法加载主类
- 点击弹出所选内容
- 解决百度地图230错误(App Scode码校验失败)