马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
通过使用引用,可以创建该对象的另一个名字,而不会引入额外的内存开销。引用在函数参数转达、返回值以及制止拷贝大型对象时特别有效。
引用的根本用法
创建引用:
引用必须在创建时被初始化,且一旦被绑定到一个对象后,就不能再改变为引用其他对象。- int a = 10;
- int& ref = a; // ref 是 a 的引用
复制代码 通过引用访问对象:
使用引用就像使用被引用的对象自己一样。- ref = 20; // 相当于 a = 20
- cout << a << endl; // 输出 20
- cout << ref << endl; // 输出 20
复制代码 引用常见用途
函数参数
使用引用作为函数参数,可以制止拷贝大型对象,同时答应函数修改传入的对象。- void modifyValue(int& x) {
- x = 5;
- }
- int main() {
- int a = 10;
- modifyValue(a);
- std::cout << a << std::endl; // 输出 5
- return 0;
- }
复制代码 函数返回值
使用引用作为函数返回值时,可以制止返回大型对象的拷贝,但必要注意制止悬挂引用(dangling reference)。- int& findValue(int arr[], int size, int value) {
- for (int i = 0; i < size; ++i) {
- if (arr[i] == value) {
- return arr[i];
- }
- }
- // 注意:这里需要处理找不到值的情况,否则会返回悬挂引用
- static int notFound = -1;
- return notFound;
- }
- int main() {
- int arr[] = { 1, 2, 3, 4, 5 };
- int& ref = findValue(arr, 5, 3);
- cout << ref << endl; // 输出 3
- return 0;
- }
复制代码 悬挂引用:返回局部变量的引用会导致悬挂引用,由于局部变量在函数返回后会被烧毁。
常量引用
使用常量引用作为函数参数可以制止拷贝(值转达),同时包管被引用的对象不会在函数中被修改。- void printValue(const int& x) {
- std::cout << x << std::endl;
- }
- int main() {
- int a = 10;
- printValue(a);
- return 0;
- }
复制代码 |