内联函数
inline double square(double x) { return x*x; }
在函数定义/声明前加上inline。
引用变量
创建引用变量
int a;
int & b = a;
a和b指向相同的指和内存单元。
int a = 1;
int & b = a;//引用
int *c = a;//指针
引用与指针的相同点:
都可以通过b
和*c
来访问和修改变量
引用与指针的不同点:
- 引用必须在声明时就初始化,而指针可以先声明再赋值
- 在引用初始化后,就与改变量关联起来,无法通过赋值来改变
int a = 1;
int & b = a;
int c = 2;
b = c;
b = c
实际上等价于a = c
。并且b的地址仍和a的地址相同。
函数重载
函数特征表,即参数的数目和类型相同。
double cube(double x);
double cube(double & x);
这两个函数的特征表不同。
当调用函数cube(x)
时,分不清是否时按引用传递。
long g(int, float);
double g(int float);
C++不允许这种重载。是否重载取决于特征标,而不是返回值。
函数模版
定义模版
template <class Any>
void Swap(Any &a, Any &b);
重载模版
template <class Any>
void Swap(Any &a, Any &b);
template <class Any>
void Swap(Any *a, Any *b, int n);
显示具体化
//非模版函数
void Swap(job &, job &);//job为结构体
//模版函数
template <class Any>
void Swap(Any &, Any &);
//显示具体化
template <> void Swap<job>(job & , job &)
在匹配函数原型时,优先级为:非模版函数 > 模版函数 > 显示具体化