C++中的临时变量

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

在早期c++比较宽松的规则下,执行下面操作

long a = 3, b = 4;
swapr(a,b);

不会改变a,b的值,因为类型不匹配,编译器创建了临时变量。

如果本意是交换a,b的值,显然这种编译器不符合要求。

现在的编译器可以改变他们的值,因为现在的编译器对于这样的操作已经禁止生成临时变量。

假如我不想改变函数参数的值,并且想用引用的形参,那么我可以将形参声明为const,在类型不匹配时,c++将在必要的时候产生临时变量。

有下面程序

#include <iostream>
using namespace std;
//func 函数若不声明为const 编译器将会报错
void func(const int &a);
int main()
{
	int a = 3;
	long b = 4;
	
	//类型匹配
	cout << "main: ";
	cout << "a: " << a << " &a: " << &a << endl;
	cout << "func: ";
	func(a);

	cout << endl; 
	
	//类型不匹配
	cout << "main: ";
	cout << "b: " << b << " &b: " << &b << endl;
	cout << "func: ";
	func(b);

	return 0;
}

void func(const int &a)
{
	cout << "a: " << a;
	cout << " &a: " << &a << endl;
}

执行后:

main: a: 3 &a: 0xbff0be9c
func: a: 3 &a: 0xbff0be9c

main: b: 4 &b: 0xbff0be98
func: a: 4 &a: 0xbff0be94

转载于:https://www.cnblogs.com/shaoguobao/archive/2011/04/01/2002320.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值