31、函数定义的高级特性

函数定义的高级特性

1. 引用返回类型与常量参数

当函数参数不是常量时,不能使用字符串字面量作为参数,因为编译器不允许。引用参数允许修改值,但编译器不会允许修改常量。若将参数设为常量,则不能使用非常量引用作为返回类型。

2. 内联函数

对于非常短的函数,编译器为处理参数传递和结果返回而生成的代码开销,相较于实际计算代码可能相当大。在极端情况下,调用函数的代码占用的内存可能比函数体代码还多。此时,可以建议编译器用函数体代码替换函数调用,这可能使程序更短、更快,或两者兼得。

使用 inline 关键字定义内联函数,示例代码如下:

inline int larger(int m, int n)
{
  return m > n ? m : n;
}

这只是一个建议,是否采用由编译器决定。当函数被指定为内联时,定义必须在每个调用该函数的源文件中可用。因此,内联函数的定义通常出现在头文件中,而不是源文件中。大多数现代编译器即使在定义中不使用 inline 关键字,也会将短函数内联。若指定为内联的函数在多个源文件中使用,应将定义放在头文件中,否则链接时会出现“未解析的外部符号”错误。

3. 静态变量

在之前看到的函数中,函数体从一次执行到下一次执行不会保留任何内容。若要统计函数被调用的次数,可以在文件作用域定义一个变量并在函数内递增,但文件中的任何函数都可能修改该变量。更好的解决方案是在函数体中定义静态变量。

静态变量在其定义首

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值