C++引用
2015-07-21 13:51
393 查看
引用:
1)引用的声明一定要初始化
2)定义了a的引用b后,相当于一个变量有两个名字:原变量a和引用变量b 不能再把该引用b作为其他变量的别名
3)声明了引用b,并不是又新定义了一个变量,它只是a的别名,不是一种数据类型,并不存储单元。所以求引用b的地址就是求原变量a的地址。
4)没有数组的引用,因为数组不是单个元素,所以无法给若干元素定义一个别名
引用有什么作用:
1)可用作函数参数
在c中一般参数使用值传递,大块的数据一般使用指针作为参数,以避免大块数据全部压栈;在c++中引用基本替代了指针的作用
例如:
void swap(char &x , char &y ){
int temp = 0;
temp = x;
x = y;
y = temp;
}
1.引用作为参数传递给函数时,被调用函数的形参就作为原来主调函数中的实参变量或对象的一个别名,所以对形参变量的操作就是对目标对象的操作
2.引用作为参数传递给函数时,在内存中并没有产生变量实体的副本,它只是源目标变量的一个别名。
2)常引用
const int &x = y;其实就是在普通引用定义前面加一个只读标识符const
例如:
例1:
char x = 1;
const char &rx = x;
rx = 2; //这是错误的
x = 2; //这是正确的
例2:
string f1();
void f2(string &s);
f2(f1()); //错误
f2("hello"); //错误
因为f1()和 “hello”都会产生一个临时对象,而在c++中,这些临时对象都是const类型,把一个const类型转换为 非const类型,这是非法的。
因此引用型参数应该在能被声明为const的情况下,尽量声明为const。
引用型参数应该在能被定义const的情况下,尽量定义为const,这样就可以定义一个变量的只读别名,而不担心变量的值被别名意外的更改。
3)引用作为函数返回值
数据类型标识符 &函数名(形参数列表){
函数体;
}
1.不能返回局部变量的值。因为局部变量在被调用函数返回后就被销毁了,那么它返回的引用指向的内存已经没有任何意义了。
2.不能返回函数内部new分配的内存的引用,
3.可以返回类成员的引用,但最好是const
理解: 引用就是一个目标变量的别名,对引用的一切操作和对变量的直接操作是一样的,可以理解为常量指针,也就是指针值一经确定就不能再改的特殊指针,并且这种特殊指针没有自己的内存空间
1)引用的声明一定要初始化
2)定义了a的引用b后,相当于一个变量有两个名字:原变量a和引用变量b 不能再把该引用b作为其他变量的别名
3)声明了引用b,并不是又新定义了一个变量,它只是a的别名,不是一种数据类型,并不存储单元。所以求引用b的地址就是求原变量a的地址。
4)没有数组的引用,因为数组不是单个元素,所以无法给若干元素定义一个别名
引用有什么作用:
1)可用作函数参数
在c中一般参数使用值传递,大块的数据一般使用指针作为参数,以避免大块数据全部压栈;在c++中引用基本替代了指针的作用
例如:
void swap(char &x , char &y ){
int temp = 0;
temp = x;
x = y;
y = temp;
}
1.引用作为参数传递给函数时,被调用函数的形参就作为原来主调函数中的实参变量或对象的一个别名,所以对形参变量的操作就是对目标对象的操作
2.引用作为参数传递给函数时,在内存中并没有产生变量实体的副本,它只是源目标变量的一个别名。
2)常引用
const int &x = y;其实就是在普通引用定义前面加一个只读标识符const
例如:
例1:
char x = 1;
const char &rx = x;
rx = 2; //这是错误的
x = 2; //这是正确的
例2:
string f1();
void f2(string &s);
f2(f1()); //错误
f2("hello"); //错误
因为f1()和 “hello”都会产生一个临时对象,而在c++中,这些临时对象都是const类型,把一个const类型转换为 非const类型,这是非法的。
因此引用型参数应该在能被声明为const的情况下,尽量声明为const。
引用型参数应该在能被定义const的情况下,尽量定义为const,这样就可以定义一个变量的只读别名,而不担心变量的值被别名意外的更改。
3)引用作为函数返回值
数据类型标识符 &函数名(形参数列表){
函数体;
}
1.不能返回局部变量的值。因为局部变量在被调用函数返回后就被销毁了,那么它返回的引用指向的内存已经没有任何意义了。
2.不能返回函数内部new分配的内存的引用,
3.可以返回类成员的引用,但最好是const
理解: 引用就是一个目标变量的别名,对引用的一切操作和对变量的直接操作是一样的,可以理解为常量指针,也就是指针值一经确定就不能再改的特殊指针,并且这种特殊指针没有自己的内存空间
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++ Custom Control控件向父窗体发送对应的消息
- C++中拷贝构造函数的应用详解