一、引用的概念
引用是C++中的一种数据类型,它相当于给变量起了个别名。引用的声明类似于指针,但是引用与指针有两个显著的不同点:
- 引用必须被初始化
- 引用不可以为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 评论