函数默认参数(Default Function Arguments)
1. 语法
- 概念:函数默认参数允许在函数定义时为参数指定默认值,这样在调用函数时可以省略这些参数。
- 语法:在函数声明和定义时,为参数指定默认值。
示例代码:
// 函数声明和定义
void print(int a = 5, int b = 10) {
std::cout << "a = " << a << ", b = " << b << std::endl;
}
int main() {
print(); // 使用默认参数:print(5, 10)
print(20); // 使用默认参数:print(20, 10)
print(20, 30); // 指定所有参数:print(20, 30)
return 0;
}
2. 特性
- 概念:函数默认参数提供了一种灵活的函数调用方式,使得函数调用更加灵活和简洁。
- 特点:函数默认参数可以减少函数调用时的必要参数数量,同时保持函数的多功能性。
3. 二义性问题
- 概念:如果一个函数的重载版本和具有默认参数的函数在省略某些参数时可以匹配,则会产生二义性问题。
- 特点:编译器无法确定调用哪个函数,导致编译错误。
示例代码:
void func(int a, int b) {}
void func(int a) {}
int main() {
func(10); // 二义性:可以匹配 func(int, int) 通过使用默认参数,也可以匹配 func(int)
return 0;
}
内联函数(Inline Functions)
1. 声明形式
- 概念:内联函数是一种建议编译器在编译时将函数体直接插入到每个调用点的函数。
- 语法:使用
inline
关键字声明函数。
示例代码:
inline int max(int a, int b) {
return a > b ? a : b;
}
int main() {
int result = max(5, 10); // max函数在编译时被内联展开
return 0;
}
2. 工作原理
-
概念:内联函数的目的是减少函数调用的开销,通过在编译时将函数体直接插入到每个调用点来实现。
-
特点:内联函数适用于简单函数,因为复杂的函数体会导致代码体积增大。
内联函数是一种优化技术,适用于函数体简单且调用频繁的情况。使用内联函数可以减少函数调用的开销,但需要谨慎使用,以避免代码体积过大。
3. 递归
- 概念:内联函数通常不用于递归,因为递归会导致函数体被多次插入,显著增大代码体积。
- 特点:在递归调用中,内联函数的效果不如普通函数。
示例代码:
inline int recursiveFunction(int n) {
if (n == 0) return 1;
return n * recursiveFunction(n - 1); // 递归调用,不推荐使用内联
}
int main() {
int result = recursiveFunction(5); // 可能导致代码膨胀
return 0;
}
作者:
hwaityd
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。