Z
ZHANK
函数与引用

引用 &

左值引用、引用 vs 指针、const 引用、引用做参数

引用 &

引用是 C++ 独有的概念 —— 一个变量的别名,不是地址的副本。它让参数传递既高效(不拷贝)又安全(不用指针语法)。

学完本章你将: 掌握左值引用、const 引用、引用 vs 指针、引用做参数/返回值。


引用作为别名

cpp
#include <iostream>

int main() {
    int x = 42;
    int &ref = x;    // ref 是 x 的引用(别名)

    ref = 100;       // 修改 ref 就是修改 x
    std::cout << x << "\n";  // 100

    // 引用必须初始化,且不能重新绑定
    int y = 10;
    // ref = y;      // 这是把 y 的值赋给 x,不是让 ref 指向 y

    return 0;
}

引用做函数参数

cpp
// ❌ 值传递——拷贝整个对象(慢、占内存)
void bad(std::string s) {
    s += "!";
}

// ✅ const 引用——不拷贝,但不能修改
void good(const std::string &s) {
    std::cout << s << "\n";
}

// ✅ 非 const 引用——用于修改参数
void modify(std::string &s) {
    s += " (modified)";
}

int main() {
    std::string s = "Hello";
    good(s);      // 不拷贝,效率高
    modify(s);    // s 变为 "Hello (modified)"
    good("temp"); // 也能传右值
}

引用 vs 指针

cpp
void byPointer(int *p) { if (p) *p = 100; }  // 必须判空
void byRef(int &r)     { r = 100; }          // 不可能为空

int x = 0;
byPointer(&x);  // 需要取地址
byRef(x);       // 直接传,语法清爽
引用指针
语法`int &r = x;``int *p = &x;`
使用`r` (自动解引用)`*p` (显式解引用)
空值不可能可能 (nullptr)
重新绑定不能可以