C++--引用类型,含有可变参数的函数

引用类型

  • 引用是标识符的别名
  • 定义一个引用的时候,必须同时对他初始化,使它指向一个已经存在的对象 
  • 例如:其实在定义引用变量ri的时候,ri相当于变量j的别名
int i,j;
int &ri = i;//定义int引用ri,并初始化为变量i的引用
j = 10;
ri = j;//相当于i = j
  • 一旦一个引用变量被初始化后,就不能改为指向其他对象,相当于二者已经绑定了

引用可以作为形参,以实现函数的双向传递。这样也符合在分配内存空间的时候直接初始化,因为只有当函数被调用的时候,进行形参实参相结合的时候,才给形参分配存储空间,也就是说只有函数被调用的时候这个引用才被定义,然后这个时候用实参的元素或者对象来初始化形参的引用变量。

#include "iostream"
using namesplace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int x = 5,y = 10;
	cout<<"x = "<<x<<"\ty = "<<y<<endl;
	swap(x,y);
	cout<<"\nx = "<<x<<"y = "<<y<<endl;
	return 0;
}

void swap(int a,int b){
	int temp;
	temp = a;
	a = b;
	b = temp;
}

/*运行结果 x = 5 y = 10
          x = 5 y = 10
*/
#include "iostream"
using namesplace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int x = 5,y = 10;
	cout<<"x = "<<x<<"\ty = "<<y<<endl;
	swap(x,y);
	cout<<"\nx = "<<x<<"y = "<<y<<endl;
	return 0;
}

void swap(int &a,int &b){
//在调用这个函数的时候会生成两个引用变量a,b同时会将实参的x,y值赋给a,b 即int &a=x,&b=y;
	int temp;
	temp = a;
	a = b;
	b = temp;
}


/*运行结果 x = 5 y = 10
          x = 10 y = 5
*/

含有可变参数的函数

C++标准中提供了两个主要的方法来实现改变函数中的形参

  • 如果所有实参类型相同,可以传递一个名为initializer_list的标准库类型
  • 如果实参的类型不同,我们可以编写可变参数的模板(在后面会学到)

initializer_list

  • 定义:initializer_list是一种标准库类型,用于表示某种特定类型的值的数组,该类型定义在同名的头文件中
  • 使用方法:initializer_list是一个类模板,在使用模板时,我们需要在模板名字后面跟一对尖括号,括号内给出类型参数
  • 例如:
initializer_list<string> ls;//initializer_list的元素类型是string
initializer_list<int> li;//initializer_list的元素类型是in
  • initializer_list比较特殊的一点是,其对象中的元素永远是常量值,我们无法改变initializer_list对象中元素值,含有initializer_list形参的函数也可以同时拥有其他形参
  • 使用举例:在编写代码输出程序产生的错误信息时,最好使用统一的一个函数来实现该函数的功能,使得对所有的错误处理都能够整齐划一,然而错误信息的种类不同,调用错误信息输出函数时传递的参数也不同。因此我们可以用initializer_list编写一个错误信息输出函数使其作用于可变数量的形参。

猜你喜欢

转载自blog.csdn.net/J_SUNV/article/details/84500570
今日推荐