C++中引用 函数高级

引用

本质上引用是一种C++内部实现的简化版指针操作,同样是透过变量名到地址操作内存。

int& ref = a; // <==> int* const ref = &a;
因此,引用一旦初始化以后就不能改变

关于引用做函数返回值

#include <iostream>
#include <string>
using namespace std;

// 错误:返回局部变量的引用
int& getLocalRef() {
    int local = 42;
    return local;
}

// 一个普通函数,会大量使用栈
void useStack() {
    int bigArray[1000];
    for (int i = 0; i < 1000; i++) {
        bigArray[i] = i;
    }
}

int main() {
    int& ref = getLocalRef();
    
    cout << "第一次读取 ref: " << ref << endl;  // 可能输出 42
    
    useStack();  // 覆盖栈内存
    
    cout << "第二次读取 ref: " << ref << endl;  // 输出不确定,不再是 42
    cout << "第三次读取 ref: " << ref << endl;  // 继续变化
    
    return 0;
}
/*
第一次读取 ref: 42
第二次读取 ref: 1000
第三次读取 ref: 0
*/

一个典型的错误示例。函数的引用是局部变量,是挂载在栈帧上的。随着函数的调用和结束,同一位置会不断有栈帧进栈和出栈。此时ref指向的就是指定位置的局部变量,位置是存在的,但是其中内容频繁变动,极不可控。

常量引用

const int &ref = 10; 此时const就是在修饰ref指向地址内的值,禁止修改。

函数高级

默认参数

函数参数给默认值:int func(int a = 10){}
1.如果一个形参有默认值,其后向右所有参数都有默认值。
2.声明和实现只能出现一次默认参数。避免默认参数二义性

占位参数

去除形参只保留数据类型;可以有默认参数

函数重载

C++中函数名允许相同,但是必须在同一作用域下,函数参数必须(个数/顺序/类型)不同

引用中const可以作为函数重载的条件
有默认参数的情况下:参数相同,必定导致歧义;参数不同,一者有默认参数,可能会导致调用歧义,依然会报错。

posted @ 2026-05-17 16:49  www6526  阅读(6)  评论(0)    收藏  举报