// ===== CodeLab: C++ 引用与指针 =====
// 来源: https://aoerliang.dpdns.org/articles/cpp-references
// 以下代码片段按文章出现顺序拼接, 共 4 段

// ----- 片段 1 (cpp) -----
int x = 10;
int& r = x;      // r 是 x 的别名
r = 20;          // x 变成 20
int y = 99;
r = y;           // 注意:这是把 y 的值赋给 x,不是让 r 改绑 y!

// ----- 片段 2 (cpp) -----
void print(const string& s) {
    // 只读访问,不拷贝,s 很大也不怕
    cout << s << endl;
}

print("hello");   // 临时字符串也能绑定 const 引用

// ----- 片段 3 (cpp) -----
int& bad() {
    int local = 42;
    return local;   // 悬垂引用!UB
}

vector<int> v = {1, 2, 3};
int& good = v[0];  // 引用容器里的元素,合法
good = 100;        // v[0] 变成 100

// ----- 片段 4 (cpp) -----
void process(Widget& w);            // 必须修改 → 引用
void dump(const Widget& w);         // 只读 → const 引用
Widget* find(int id);               // 可能找不到 → 返回指针(nullptr)
unique_ptr<Widget> make();          // 拥有所有权 → 智能指针
Widget w; Widget* p = &w;           // 需要数组/多态 → 原始指针
