函数定义的高级特性
1. 引用返回类型与常量参数
当函数参数不是常量时,不能使用字符串字面量作为参数,因为编译器不允许。引用参数允许修改值,但编译器不会允许修改常量。若将参数设为常量,则不能使用非常量引用作为返回类型。
2. 内联函数
对于非常短的函数,编译器为处理参数传递和结果返回而生成的代码开销,相较于实际计算代码可能相当大。在极端情况下,调用函数的代码占用的内存可能比函数体代码还多。此时,可以建议编译器用函数体代码替换函数调用,这可能使程序更短、更快,或两者兼得。
使用 inline 关键字定义内联函数,示例代码如下:
inline int larger(int m, int n)
{
return m > n ? m : n;
}
这只是一个建议,是否采用由编译器决定。当函数被指定为内联时,定义必须在每个调用该函数的源文件中可用。因此,内联函数的定义通常出现在头文件中,而不是源文件中。大多数现代编译器即使在定义中不使用 inline 关键字,也会将短函数内联。若指定为内联的函数在多个源文件中使用,应将定义放在头文件中,否则链接时会出现“未解析的外部符号”错误。
3. 静态变量
在之前看到的函数中,函数体从一次执行到下一次执行不会保留任何内容。若要统计函数被调用的次数,可以在文件作用域定义一个变量并在函数内递增,但文件中的任何函数都可能修改该变量。更好的解决方案是在函数体中定义静态变量。
静态变量在其定义首
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



