c++ primer学习笔记(6)-函数(2)
2011-02-24 20:44 Clingingboy 阅读(302) 评论(0) 编辑 收藏 举报
一.默认实参
string screenInit(string::size_type height = 24,
string::size_type width = 80,
char background = ' ' );
要么全有,要么全没有.
调用
string screen;
screen = screenInit(); // equivalent to screenInit (24,80,' ')
screen = screenInit(66); // equivalent to screenInit (66,80,' ')
screen = screenInit(66, 256); // screenInit(66,256,' ')
screen = screenInit(66, 256, '#');
二.函数静态局部变量
这个变量定义于函数中,但生命周期却跨越了函数,对象一旦被创建,直至程序结束前才被撤销
size_t count_calls()
{
static size_t ctr = 0; // value will persist across calls
return ++ctr;
}
int main()
{
for (size_t i = 0; i != 10; ++i)
cout << count_calls() << endl;
return 0;
}
输出:
三.内联函数
一个函数前面加上inline关键字,则成为内联函数.
特性:将函数展开,消除函数调用的额外开销(提高性能),适用于调用次数多,代码精湛的
四.返回值
1.非引用返回
int Max(int &a,int &b)
{
if(a>b)
return a;
return b;
}
Test
int a=10;
int b=20;
int c=Max(a,b);
int *d=&b;
int *e=&c;
bool f=d==e;
cout << f << endl;
输出0,地址不同
2.返回引用
int &Max2(int &a,int &b)
{
if(a>b)
return a;
return b;
}
唯一的变化就是返回值变了
重新测试
int a=10;
int b=20;
int &c=Max2(a,b);
int *d=&b;
int *e=&c;
bool f=d==e;
cout << f << endl;
返回1,地址相同
3.不要返回函数局部对象的引用
当函数执行完毕后,将要对布局对象进行释放
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现