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
2368

被折叠的 条评论
为什么被折叠?



