C++中的临时变量
时间:2011-04-01 来源:邵国宝
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; 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
相关阅读 更多 +