关于重载运算符的两个问题

一鸣惊天 2011-10-01 10:52:58
我重载了一个乘法运算符:
Matrix& Matrix::operator*(double value)
{
Matrix temp2(this->Rows,this->Cols);
temp2=*this;
for(int i=0;i<Rows;i++)
{
for(int j=0;j<Cols;j++)
{
*(temp2.matrix+i*temp2.Cols+j)*=(double)value;
}
}
return temp2;
}
编绎没错,运行出错。
然后我改了:
Matrix& Matrix::operator*(double value)
{
static Matrix temp2(this->Rows,this->Cols);
temp2=*this;
for(int i=0;i<Rows;i++)
{
for(int j=0;j<Cols;j++)
{
*(temp2.matrix+i*temp2.Cols+j)*=(double)value;
}
}
return temp2;
}
就可以了,这是那个叫什么生存域的问题吗?但:
int f()
{
int a=9;
return a;
}为什么没问题了。

还有为什么在这里可以调用temp2私有成员了(double *matrix;int Rows;int Cols是Matrix的私有成员)。
...全文
89 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
一鸣惊天 2011-10-01
  • 打赏
  • 举报
回复
返回的是引用?就是因为前面加的这个&吗(Matrix& Matrix::operator*(double value)),但int & f()好像也行啊,还有加这个&有什么用,怎么不加就不行。
maoxing63570 2011-10-01
  • 打赏
  • 举报
回复
int f()你返回的时候不是返回的引用,而是返回它的一个拷贝,原因是生存域的问题
一鸣惊天 2011-10-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 maoxing63570 的回复:]

不要返回局部对象的引用
[/Quote]
不要返回局部对象的引用的原因是不是生存域的问题,int f()为什么可以,求解释。
maoxing63570 2011-10-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xhxingyi 的回复:]

咦!代码怎么不变色啊!
是要把代码放[/code]中括号的里面吗?
[/Quote]
是的,这个也算是html的基础知识吧
maoxing63570 2011-10-01
  • 打赏
  • 举报
回复
不要返回局部对象的引用
一鸣惊天 2011-10-01
  • 打赏
  • 举报
回复
咦!代码怎么不变色啊!
是要把代码放[/code]中括号的里面吗?
lzq2550 2011-10-01
  • 打赏
  • 举报
回复
整型是通过寄存器返回的,即先把值保存在EAX中,再赋于相应的整形变量。
而对于结构体和类,寄存器保存不了它所有的内容,只能保存它的地址,所以你必须保证这个结构体不是临时对象。

返回类型 寄存位置
bool,char, AL
short AX
int、指针 EAX
_int64等64位结构体 EDX,EAX
其它大小结构体 EAX(结构体地址)
float、double st(0)浮点寄存器



相信你也试过以下的错误,
int &f()
{
int a=9;
return a;
}
warning C4172: returning address of local variable or temporary


64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧