C++引用的妙用

一、引用的概念

引用是C++中的一种数据类型,它相当于给变量起了个别名。引用的声明类似于指针,但是引用与指针有两个显著的不同点:

  1. 引用必须被初始化
  2. 引用不可以为NULL

除此之外,引用与指针的功能类似,可以作为函数参数、返回值和变量。

#include <iostream>

int main() {
    int a = 10;
    int& b = a; // 定义b为a的引用
    b++;
    std::cout << "a = " << a << std::endl; // 输出 a = 11
    return 0;
}

在上面的代码中,b是a的引用,对b的改变会直接影响到a。

二、函数参数中的引用

函数参数中传递引用,可以避免拷贝大数据结构带来的时间和空间上的浪费。

#include <iostream>
#include <vector>

void add_10(std::vector<int>& vec) { // 使用引用传递vector
    for(auto& i : vec) { // 使用引用遍历vector
        i += 10;
    }
}

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    add_10(vec);
    for(const auto& i : vec) { // 使用const引用遍历vector
        std::cout << i << " "; // 输出 11 12 13 14 15
    }
    return 0;
}

在上面的代码中,add_10函数使用引用传递vector,add_10内部对vector的修改会直接影响到函数外部传入的vector。

三、返回值中的引用

函数返回引用,效率高,可以直接修改被返回的变量。

#include <iostream>

int& max(int& a, int& b) { // 返回引用类型
    return a > b ? a : b;
}

int main() {
    int a = 10, b = 20;
    max(a, b) = 100; // 直接修改被返回的变量
    std::cout << "a = " << a << ", b = " << b << std::endl; // 输出 a = 10, b = 100
    return 0;
}

在上面的代码中,max函数返回a和b中较大的一个,使用max(a, b) = 100直接修改被返回的变量b的值。

四、引用的实现原理

引用的实现原理是编译器为每个引用变量创建一个指针变量,这个指针变量指向其所表示的变量。

#include <iostream>

int main() {
    int a = 10;
    int& b = a; // 定义b为a的引用
    int* p = &a; // 定义p为a的地址

    std::cout << "a = " << a << std::endl;
    std::cout << "b = " << b << std::endl;
    std::cout << "*p = " << *p << std::endl;

    b = 20; // 修改b的值,a也会被修改
    std::cout << "a = " << a << std::endl;
    std::cout << "b = " << b << std::endl;
    std::cout << "*p = " << *p << std::endl;
    return 0;
}

在上面的代码中,使用指针p修改a的值,b也会被修改,因为b实际上是指向a的指针。

五、小结

引用是C++中非常重要的一种数据类型,它可以避免无谓的拷贝,提高程序效率,更重要的是提高了程序可读性。

引用可以被用于函数参数和返回值中,引用的内部实现是编译器为每个引用变量创建一个指针变量。

本文链接:https://my.lmcjl.com/post/15893.html

展开阅读全文

4 评论

留下您的评论.