引用

内容简介

引用是对象的别名。它让函数可以直接操作实参,也能避免部分指针带来的空指针和解引用风险。引用是 C++ 很核心的语法。

用法

基本引用

int a = 10;
int& ref = a;
 
ref = 20;
std::cout << a << std::endl;  // 20

引用作函数参数

void swap_value(int& a, int& b)
{
    int temp = a;
    a = b;
    b = temp;
}

const 引用

void print_name(const std::string& name)
{
    std::cout << name << std::endl;
}

引用作返回值

int& at(std::vector<int>& values, std::size_t index)
{
    return values[index];
}

调用结果可以作为左值:

at(values, 0) = 100;

最佳代码实践

  • 需要修改实参时使用普通引用,例如 T&
  • 只读取大对象时使用 const T&,避免拷贝。
  • 不需要为空的参数优先用引用;可能为空或需要重新指向时用指针。
  • 返回引用时,必须保证被引用对象在函数返回后仍然存在。

错误用法

int& ref;  // 错误:引用必须初始化
int& bad()
{
    int value = 10;
    return value;  // 错误:返回局部变量引用
}
void set_value(const int& value)
{
    value = 10;  // 错误:const 引用不能修改
}

注意事项

  • 引用一旦绑定,不能改为引用另一个对象。
  • const int& ref = 10; 合法,因为临时对象生命周期会延长到引用生命周期结束。
  • 引用常被理解为“语法层面的安全指针”,但写代码时应把它当作别名,而不是指针。

相关:cpp右值引用CandCpp指针

学习路径