class CComplex
{
public:
CComplex(int nX=0,int nY=0){x=nX;y=nY;};
public:
int x;
int y;
public:
CComplex operator +(CComplex& p){ return CComplex(p.x+x,p.y+y); };}请问为什么CComplex operator +(CComplex& p)中要用引用,而不是CComplex p;
实际上我如果换成CComplex p同样可以的。那么引用和不引用有什么本质上的区别呢?
{
public:
CComplex(int nX=0,int nY=0){x=nX;y=nY;};
public:
int x;
int y;
public:
CComplex operator +(CComplex& p){ return CComplex(p.x+x,p.y+y); };}请问为什么CComplex operator +(CComplex& p)中要用引用,而不是CComplex p;
实际上我如果换成CComplex p同样可以的。那么引用和不引用有什么本质上的区别呢?
如果不用引用的话,对参数的传递将会引发copy ctor的调用。
如果用引用, 操作直接在实际参数上进行,不会调用copy ctor
================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]
改为 CComplex operator +(const CComplex& p) const; 好象好一点.
第一个const保护+号右边的复数,第二个const保护+号左边的复数.这样原来的两个运算书就比较安全了.
如果参数是CComplex& p而不是const CComplex& p,在传入临时对象的引用时会出问题。
{
public:
CMyArray (){}
//! CMyArray (CMyArray &Src){}
};BOOL ProcessDataInArray (CMyArray saBuffer)
{
return false;
}void CSomeFunc()
{
CMyArray naTemp;
ProcessDataInArray (naTemp); //Need CMyArray(CMyArray &Src) func.
}上面这个函数的声明是对的(通得过编译的),但是对ProcessDataInArray 的调用是错的(通不过编译的),如果你把“//!”的去掉程序是可以通过编译传值调用是有一定条件才可用的