cpp学习笔记-引用

引用简述

#include <iostream>  
using namespace std;  
  
int& test01() {  
    static int a = 10;  // 使用静态变量来避免局部变量的问题  
    return a;  
}  
  
int main() {  
    int &ref = test01();  
  
    cout << "ref = " << ref << endl;  
    system("pause");  
  
    return 0;  
}

这里返回的是a的引用,refa的别名。
!!!不要返回局部变量

返回引用和返回指针的区别

返回 a 的引用和 return &a; 是不同的概念,涉及到引用和指针的区别。

  1. 返回 a 的引用:

    int& test01() {
        static int a = 10;  // 使用静态变量来避免局部变量的问题
        return a;  // 返回的是a的引用
    }
    

    这里 test01 函数返回的是 a 的引用。当你在 main 函数中使用 int &ref = test01(); 时,ref 成为 a 的别名,对 ref 的修改会直接影响 a

  2. 返回 &a

    int* test01() {
        static int a = 10;  // 使用静态变量来避免局部变量的问题
        return &a;  // 返回的是a的地址
    }
    

    这里 test01 函数返回的是 a 的地址。当你在 main 函数中使用 int* ptr = test01(); 时,ptr 包含的是 a 的地址,而不是 a 的值。通过 ptr 可以访问和修改 a 的值,但 ptr 不是 a 的别名,而是指向 a 的指针。

总体来说,返回引用通常用于提供对变量的别名,而返回指针则提供了对变量地址的访问。在具体的场景中,你需要根据需求选择使用引用还是指针。在你的示例中,由于是返回一个静态变量的引用,直接返回 a 的引用更为直观和简洁。

引用的本质

本质:引用的本质在C++内部实现一个指针常量

#include <iostream>  
using namespace std;  
  
void func(int& ref){  
    ref =100; //ref是引用,转换为*ref = 100  
}  
int main(){  
    int a = 10;  
    // 自动转换为 int* const ref = &a;指针常量是指针指向不可改,也说明为什么引用不可改  
    int& ref = a;  
    ref = 20; //内服发现ref是引用,自动转换为: *ref = 20;  
    cout << "a:" << a << endl;  
    cout << "ref:" << ref << endl;  
      
    func(a);  
    return 0;  
      
}

指针常量的指向不可以更改,但指向的变量的值可以更改

常量引用

using namespace std;  
  
int main(){  
    /*  
     常量引用  
     使用场景:用来修饰形参,防止误操作          加上 const 后,编译器将代码修改为 int temp = 10;const int & ref = temp;     */    const int &ref = 10; //引用必须引用一块合法的空间  
    return 0;  
}

详情介绍

在C++中,常量引用是指通过引用访问的变量是常量,即不能通过该引用修改变量的值。使用常量引用有助于防止在函数调用中对变量的意外修改,并提高代码的安全性。

常量引用的语法如下:

const DataType &referenceName = variable;

其中,DataType 是变量的数据类型,referenceName 是引用的名称,variable 是被引用的变量。关键之处在于使用 const 关键字来标识引用是常量的,防止通过引用修改变量。

以下是一个简单的示例,演示了常量引用的用法:

#include <iostream>
using namespace std;

void printValue(const int &value) {
    // value 是常量引用,不可修改
    cout << "Value: " << value << endl;
}

int main() {
    int number = 42;

    const int &ref = number;  // 常量引用
    // ref = 100;  // 编译错误,不能通过常量引用修改值

    printValue(number);  // 通过常量引用传递参数

    return 0;
}

在上述例子中,const int &ref 是一个常量引用,它指向 number,但不能通过 ref 修改 number 的值。printValue 函数接受一个常量引用作为参数,也演示了通过常量引用传递参数的情况。

常量引用通常在函数参数中使用,以防止函数修改传入的参数,并在某些情况下,也可以在类的成员函数中使用。通过使用常量引用,可以确保代码的安全性和可读性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值