C++基础之默认参数、函数重载与引用全解析

📅 发布时间:2026/7/9 19:07:02 👁️ 浏览次数:
C++基础之默认参数、函数重载与引用全解析
一、默认参数默认参数的核心概念在 C 中默认参数Default Arguments 是为函数参数预先设定的 “备用值”在函数声明 / 定义时指定调用函数时若省略该参数编译器会自动使用这个预设值若显式传入参数则覆盖默认值。例//无默认参数 void fun1(int a) { coutaendl; } //默认参数为2 void fun2(int a2) { coutaendl; }测试#include iostream using namespace std; void fun1(int a) { cout a endl; } void fun2(int a 2) { cout a endl; } int main() { fun1(5); fun2(5); fun2(); return 0; }结果fun2没有参数的时候会输出默认参数2。二、函数重载在 C 中函数重载指在同一作用域内定义多个函数名完全相同但参数列表参数的个数、类型、顺序不同的函数调用时编译器会根据传入参数的特征个数、类型、顺序自动匹配到对应的函数版本。简单来说函数重载的核心是 “同名不同参编译器自动匹配”—— 让同一个函数名能处理不同类型 / 个数的参数。例如void add(int a, int b) { cout a b endl; } void add(double a, double b) { cout a b endl; } int main() { add(10, 20); add(1.5, 1.2); return 0; }输出C 编译器通过 “名字改编Name Mangling” 为每个重载函数生成唯一内部名实现调用匹配这也是 C 语言不支持重载的原因如果只是返回值不同则不能构成函数重载void add(){ } int add(){ }重点为什么c支持函数重载c语言不支持C 支持函数重载、C 语言不支持的根本原因是两者编译器对函数名的编译处理机制不同——C 会通过「名字改编Name Mangling」为函数生成唯一内部名C 语言仅保留原始函数名无法区分同名不同参的函数。C 为了支持重载设计了「名字改编」机制编译阶段编译器会根据「函数名 参数类型 参数个数」按照特定规则生成唯一的内部函数名链接阶段调用函数时编译器会根据传入参数的类型匹配对应的改编后函数名链接器能精准找到目标函数。C 语言编译器对函数的处理逻辑非常简单编译阶段仅记录函数的原始名称比如 Add不会将参数类型 / 个数融入函数名链接阶段链接器会根据原始函数名查找函数定义若存在多个同名函数哪怕参数不同链接器会判定为「重定义」直接报错。三、引用3.1引用的概念引用不是新定义一个变量而是给已存在变量取了一个别名编译器不会为引用变量开辟内存空间它和它引用的变量共用同一块内存空间。声明语法类型 引用名 原变量;如 int ref a;必须在声明时立即初始化不能先声明后赋值不可更改指向引用一旦绑定某个变量生命周期内不能再绑定其他变量无 NULL 引用引用必须绑定有效变量不能指向空值指针可以为 NULL多级引用无效不存在 int ref 这种 “引用的引用”编译报错。