关于引用参数传递的一个问题
近日刚刚学vc.net
遇到一个问题程序如下:
#include "stdafx.h"
#include <conio.h>
#include <iostream.h>
#include <sys/timeb.h>
#include <time.h>
class Book
{
public:
int No;
Book(int n);
~Book();
};
Book::Book(int n)
{
No=n;
}
Book::~Book()
{
}
void Add(Book b) // 普通参数传递
{
b.No++;
}
void AddRef(Book & b) // 引用参数传递
{
b.No++;
}
int _tmain(int argc, _TCHAR* argv[])
{
Book B1(1); // 临时变量
int i;
struct timeb CurTime;
char TimeMes[100];
char *timeline;
// 计算内容
for(i=0;i<10000000;i++)
AddRef(B1);
// 修改此句为:Add(B1);
// Add(B1);
cout<<B1.No<<endl;
getch();
return 0;
}
使用引用参数传递的时候结果是10000001
而使用普通参数传递的时候结果却是1。
为什么引用参数传递与普通参数传递结果不一样 `?
3q```
问题点数:20、回复次数:4Top
1 楼somedummy(某人马甲)回复于 2005-01-01 14:40:55 得分 0
这个……
似乎不一样才对吧?引用不仅影响语法,还影响了传参时候的代码的行为Top
2 楼beyondtkl(大龙驹<*好久没来了,兄弟们好吧。*>)回复于 2005-01-01 17:27:33 得分 20
void Add(Book b) // 普通参数传递
{
b.No++; // 修改的是一个临时的Book对象 此对象是b的拷贝 函数执行完后 自动析构
}
void AddRef(Book & b) // 引用参数传递
{
b.No++; // 修改的是实参本身!!
}
引用:
1. 避免 临时对象的copy之类的.
2. 可以直接修改实际参数本身
如果不想被修改 那么就
cosnt Book &b 传递 常引用 避免临时对象..Top
3 楼xietnt(雷管)回复于 2005-01-02 00:16:08 得分 0
如何修改才能使Add(B1)也=10000001?Top
4 楼somedummy(某人马甲)回复于 2005-01-02 10:47:47 得分 0
似乎不是用引用的话就没有办法做到,要不然传递指针也可以(不过这样的话就不是按值传递了,另外语法也要修改)。Top




