C++基础
函数
内联函数
- 内联函数
- 非常短的函数适合于内联
- 函数体会到插入到发生函数调用的地方
- 普通函数调用多次也只有一块内存划分,省空间费时间。内联函数调用几次就占用几次空间,节省时间,同宏一样。
inline void fn()
{
std::cout<<"hello world"<<std::endl;
}
int main()
{
fn();
fn();
}
- 内联函数的函数体限制
- 内联函数中,不能有结构复杂的结构控制语句
- 不能出现递归函数
- 内联函数只适合1-5行小函数
- 内联函数与宏定义
- 宏定义可以代替小函数定义,但是有缺陷
- 宏只是告诉编译器简单的替代代码,不检查参数类型,
往往造成语句的实际结果不能代表程序员的意图
宏的作用可以用内联函数代替:
重载函数
- 定义:两个以上的函数,取相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪个函数,这就是函数重载。
#include <iostream>
void test()//test_void
{
std::cout<<"hello world1"<<std::endl;
}
void test(int a)//test_int
{
std::cout<<"hello world2"<<std::endl;
}
int main()
{
test();//hello world1
test(10);//hello world2
}
void test(int a);
void test(int b);//No
void test(int a);
int test();//No
void test(int a,int b);
void test(int b);//Yes
void test(int a);
void test();//Yes
void test(int a,double c);
void test(int c,double b);//Yes
- 内联函数的重载顺序
- 寻找一个严格的匹配,如果找到了就是那个
- 通过内部转换寻求一个匹配,找到了就用
- 通过用户定义的转换寻求一个匹配,若能查出有唯一的的一组转换,就用那个函数
递归函数
- 定义:自调用函数,在函数体
- 递归函数的评价
- 递归增加了系统开销
- 递归的目的是简化程序设计,使程序易读
- 现代程序设计的目标主要是可读性好
- 对于嵌入式来说,使用递归要慎重。
参数默认的函数
- 调用函数时可以不指定该全部参数
- 为不指定参数赋默认值
void test(int a=100)
{
std::cout<<"test="<<b<<std::endl;
}
int main()
{
test();//100
test(2);//2
}
void test(int a=100)
{
std::cout<<"test"<<a<<std::cout;
}
void test()
{
std::cout<<"test asd"<<std::cout;
}
int main()
{
test();//error
}
- virtual与inline的区别
- 虚函数:在基类成员函数的声明前加上virtual关键字,意味着将该成员函数声明为虚函数。
- 内联函数:inline与函数的定义体放在一起,使该函数称为内联。inline是一种用于实现的关键字,而不是用于声明的关键字。