函数:重载、默认参数与内联

📅 2026/7/21 6:51:33
函数:重载、默认参数与内联
函数重载、默认参数与内联C 函数的扩展能力在 C 语言函数 中我们学习了函数定义、参数传递、返回值与递归。C 在此基础上增加了函数重载、默认参数、inline和函数模板使函数更加灵活强大。一、C 函数基础链接C 完全支持 C 风格函数定义、调用、值传递、指针传递、返回值、递归等。详见 C 第 09 篇。C 推荐大对象用const T传递避免拷贝见 第 04 篇。二、函数重载同一作用域内函数名相同但参数列表不同类型或个数编译器根据实参选择匹配版本#includeiostreamintadd(inta,intb){returnab;}doubleadd(doublea,doubleb){returnab;}intadd(inta,intb,intc){returnabc;}intmain(){std::coutadd(1,2)std::endl;// 调用 int 版std::coutadd(1.5,2.5)std::endl;// 调用 double 版std::coutadd(1,2,3)std::endl;// 调用三参数版return0;}重载规则仅返回值不同不能构成重载参数个数或类型必须不同C 不支持重载C 支持三、默认参数函数参数可指定默认值调用时可省略#includeiostreamvoidgreet(conststd::stringname,conststd::stringprefixHello){std::coutprefix, name!std::endl;}intmain(){greet(Alice);// Hello, Alice!greet(Bob,Hi);// Hi, Bob!return0;}规则默认参数从右向左连续void f(int a, int b 0, int c 0);合法默认参数在声明中指定定义中可省略默认参数与重载配合使用需谨慎避免歧义四、inline 函数inline建议编译器将函数体 inline 展开减少调用开销适用于短小的频繁调用函数inlineintsquare(intx){returnx*x;}定义通常放在头文件中现代编译器会自动 inline显式inline更多是 ODR 相关类内定义的成员函数默认为 inline五、函数模板初探编写与类型无关的函数编译器根据实参类型生成具体版本#includeiostreamtemplatetypenameTTmaximum(T a,T b){return(ab)?a:b;}intmain(){std::coutmaximum(3,5)std::endl;// intstd::coutmaximum(3.14,2.71)std::endl;// doublereturn0;}模板详解见 第 12 篇。六、constexpr 函数C11编译期可求值的函数constexprintfactorial(intn){return(n1)?1:n*factorial(n-1);}intarr[factorial(5)];// 120 元素数组编译期确定七、实战练习练习1重载 print编写print(int)、print(double)、print(const std::string)三个重载。练习2默认参数编写void draw(char ch *, int count 5)打印 count 个 ch。练习3函数模板编写模板函数swap(T a, T b)交换两值。八、总结与延伸本节重点回顾函数重载同名不同参C 不支持默认参数从右向左声明处指定inline建议内联短小函数适用函数模板templatetypename T泛型编程入门下节预告进入进阶阶段《类与对象面向对象基础》。延伸阅读C 语言函数C 速查 §5 函数与重载知识点卡片重载参数类型/个数不同仅返回值不同无效默认参数void f(int a, int b 0);template T func(T x);下一篇见