c++学习记录
1. 内联函数
内联函数的编译代码与其他程序代码“内联”起来了。编译器将使用相应的函数代码替换调用。由于内联函数无需跳到另一个位置处执行代码,因此其运行速度比调用常规函数稍快,但是代价是需要占用更多的内存.
程序员请求将函数作为内联函数时,编译器不一定满足这种要求。
例:
inline square(int x){return x*x;}
2.引用变量
&符号来指示变量的地址,声明引用变量
例如要将rodents作为rats的别名,有以下
int rats; int &rodents=rats;
2-1 将引用作函数参数
引用常常被用作函数参数,使得函数中的变量名成为调用程序中变量的别名。
按引用传递允许被调用的函数能够访问调用函数的变量。
void swap(int &a,int &b) { int temp=a; a=b; b=temp; }
2-2 临时变量、引用参数和const
如果实参与引用参数不匹配,c++将生成临时变量。当前仅当参数const引用时,c++才允许这样做。
编译器在以下两种情况生成临时变量
- 实参类型正确但不是左值
- 实参类型不正确,但能转换成正确的类型
3.默认参数
默认参数指的是当函数调用中省略了实参时自动使用的一个值。
例如,如果将
void wow(int n) 设置成n有默认值为1,则调用函数wow()相当于wow(1),这极大的提高了使用函数的灵活性。
例如函数调用left(“theory”,3),将创建新字符串“the”,并返回一个指向该字符串的指针。现在默认第二个参数设置为1,如何设置默认值,如下:
char * left(const char * str,int n=1);
4.函数重载
函数多态是c++在c语言基础上新增的功能
函数重载的关键是函数的参数列表——函数特征标志
如果两个函数的参数数目和类型相同,同时参数的排序也相同,则它们的特征标相同,而变量名是无关紧要的。
void print(const char * str,int width); void print(double d,int width); void print(long l,int width); void print(int i,int width); void print(const char *str); 使用print()函数时,编译器将根据所采用的用法使用相应特征标的原型
print("pancakes",15); print("syurp"); print(2999.0,10); print(1999,12); print(1999L,15);
5.函数模板
函数模板是通用的函数描述,也就是说泛型来定义函数,其中的泛型可用具体类型替换。通过将类型作为参数传递给模板,可使编译器生成类型的函数。例如
template <typename anytype> //建立模板,类型命名为anytype void swap(anytype &a,anytype &b) { anytype temp=a; a=b; b=temp; } 在c++ 98添加关键字typename 之前,c++使用关键字class来创建模板。
template <class anytype> void swap(anytype &a,anytype &b) { anytype temp=a; a=b; b=temp; }