记录c++学习时新的概念
目录
目录
c语言交流🐧qun:938424667
1.内联函数
C++提供一种提高函数效率的方法,即在编译时将被调函数的代码直接嵌入到主调函数中,取消调用这个环节。这种嵌入到主调函数中的函数称为内联函数(inline function).。
inline 返回类型 函数名(形参列表)
{
函数体
}
关键字:inline
ps:1.函数体内不允许使用循环语句和switch语句。
2.内联函数的声明必须出现在内联函数第一次被调用之前。
2.函数的默认参数
C++允许在函数定义或函数声明时,为形参指定默认值,这样的参数称为默认参数(default argument),一般形式为:
返回类型 函数名(形参,类型 默认参数名=默认值)
{
函数体
}
ps:1.在定义时已设置默认值,那么在不能在声明中再次设置,反之亦然。
2.可以设置多个默认参数,设置的顺序为自右向左。也就是说,要为某个参数设置默认值,则他右侧都必须是默认参数。
3.默认值可以是常量,全局变量,甚至是函数调用,但不可以是局部变量。
4.默认参数函数调用时,如果参数没有给出,系统会自动补齐默认值。
3.函数重载
函数重载(function overloading)是在同一个域中用同一个函数名来定义多个函数,但函数参数列表应彼此有不同,或者是参数个数不同,或者是参数类型不同,或者两者均有不同。
//形参类型不同
int add(int a,int b);
double add(double a, double b);
//形参个数不同
int add(int a,int b);
int add(int a,int b,int c);
ps:1.重载函数的形参必须不同(个数或类型)。
2.编译程序将根据实参形参来匹配函数。
3.不同功能的函数最好不要声明为重载函数,以免出现调用结果的混淆。
4.函数模板
函数模板(function template)是一个独立于类型的函数,可作为一种模式,产生函数的特定类型版本。语法形式:
template<模板形参表>返回类型 函数名(形参列表)
{
函数体
}
关键字:template
举例:
template<typename T>//函数模板
T abs(T x)
{
return x<0?-x:x;
}
int main()
{
int a=-5;
double b=-5.5;
cout << abs(a) <<";" <<abs(b) <<endl;
return 0;
}
模板形参表(template parameterlist)是用一对尖括号括<>括起来的一个或多个模板形参的列表,不允许为空,形参之间以逗号分隔,其形式有两种:
1.typename 类型参数名1,typename 类型参数名2,......(主要用这个)
2.class 类型参数名1,class 类型参数名2,......(与其他关键词冲突)
5.作用域与生命期
作用域
1.可以使用extern声明将变量或函数实体的可见区域往前延伸,称为前置声明(forward declaration).
//变量
extern 类型 变量名,...
//函数
extern 返回类型 函数名(形参列表)
关键字:extern
2.在全局作用域中,变量或函数实体若使用static修饰,则该实体对于其他源文件是屏蔽的,称为私有的(private)。
//变量
static 类型 变量名[=初值],...
//函数
static 返回类型 函数名(形参列表)
关键字:static
生命期
1.自动变量
默认情况下为自动对象(automatic objects),其存储方式为自动存储。
auto 类型 变量名[=初值],...
关键字:auto(可省略)
2.寄存器变量
C++语言允许用CPU的寄存器来存放局部变量,称为寄存器变量在局部变量前加上register存储类别修饰来定义的,其形式为:
register 类型 变量名[=初值],...
关键字:register
ps:需是经常使用的变量才能定义。
3.静态局部变量
在局部对象的前面加上static存储类别修饰用来指明对象是静态局部对象(staticlocal object),一般形式为:
static 类型 变量名[=初值],....
关键字:static
ps:静态变量会保持其值.
6.程序的组织结构
1.内部函数
函数本质上是全局的,在多文件的程序中,在连接时会检查函数在全局作用域内是否名字唯一,如果不是则出现连接错误。在函数定义前加上static修饰,则函数称为内部函数,定义形式为:
static 返回类型 函数名(形参列表)
{
函数体
}
之所以使用内部函数的原因是该函数逻辑上仅限定在一个文件中使用,其他文件不会用到。而且希望连接检查时永远不可能出现该函数名不唯一的连接错误,这在多人编写同一个程序的软件开发模式中是常用的策略。
关键字:static
2.外部函数
在函数声明时加上extern,则称为外部函数。
extern 返回类型 函数名(形参列表)
{
函数体
}
关键字:extern(可省略)
ps:C++中所有的函数本质上都是外部函数。因此,上面的extern都可以省略。