该何时使用引用与const

/*
 *函数的形参,函数的返回值,它们的类型问题
 * 我们应该知道,一个函数的形参是由实参初始化的,一个函数的返回值是由return 后
 *的值初始化的;因此,如果将函数形参和返回值类型声明为引用类型,则它们会共占用同一内存
 *空间,而不是在内存中另开辟空间储存所要的数据(此为复制),这样同一变量的修改可以同步,
 *提高程序效率。
 */
/*在C++中,如果函数的形参不用引用,就意味着要将传递的实参复制一份;如果有引用而没加const
 *就可能意味着要改变引用的值;如果既不复制也不改值,就应该加上引用"&"和const,提高程序效率*/

#include <iostream>
using namespace std;

//void Swap(int ,int );
void Swap(int* ,int* );
void Swap(int& ,int& );
//void output(int );
void output(const int& );
int main()
{
int a,b;
cout << "输入两个整数:";
cin >> a >> b;
//Swap(a,b);
//cout << "交换后:" << a << ',' << b << endl;
Swap(&a,&b);
cout << "交换后:" << a << ',' << b << endl;
Swap(a,b);
cout << "交换后:" << a << ',' << b << endl;

cout << "&a = " << &a << '\t' << "&b = " << &b << endl;
output(a);
output(b);
output(123);
void (*p)(int* ,int*) = &Swap; //根据指针指向的函数来匹配,即根据函数指针来判断
(*p)(&a,&b);
cout << "交换后:" << a << ',' << b << endl;
return 0;
}
/*函数重载(重载的函数,其函数名相同),编译器会根据函数类型、
  参数类型以及参数个数的不同来判断调用哪个函数。*/
//void Swap(int x,int y)
//{ int temp = x; x = y;y = temp;}

void Swap(int* x,int* y)
{ int temp = *x;*x = *y;*y = temp;}

//引用不指针更直接,谁给它传值,它就和谁是同一个变量(因为引用就是变量的别名),占用同一内存空间
void Swap(int& x,int& y) 
{ int temp = x;x = y;y = temp;}

/*可以清楚的看到,如果在函数的形参中没有加引用,那么它只是将实参的值复制一份,并在内存中临时
  开辟空间加以储存复制的值。(因为两者的地址不同)*/
//void output(int n)
/*如果对下面的函数传递int 字面常量(即是const变量),则会出错,因为类型不一致。
  error: invalid initialization of non-const reference of type ‘int&’
  from an rvalue of type ‘int’*/
//void output(int& n)

void output(const int& n)

{ cout << &n << '\t' << hex << showbase << n << endl; } //以十六进制输出,并以0x标记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值