首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于return的疑问解决方案

2012-02-20 
关于return的疑问下面是一个运算符重载成员函数的实例:class complex{public:complex operator + (complex

关于return的疑问
下面是一个运算符重载成员函数的实例:
class complex
{
 public:
  complex operator + (complex c2);
 private:
  double real;
  double imag;
};
complex complex::operator(complex c2)
{
  return complex(real+c2.real,imag+c2.imag);
}
int main()
{
 complex c1(5,4),c2(2,10),c3;
 c3=c1+c2;
 return 0;
}

上面return会创建一个临时无名对象作为返回值,那么请问下c3=c1+c2的操作是下面哪个?
 1:调用complex类的拷贝构造函数把临时无名对象赋值给c3
 2: 直接把c3的作为无名对象的名字

偶是c++初学者,只是希望多了解点c++的机制,还有如果想了解这方面知识有高手推荐一点么?感激不尽~

[解决办法]
2.
如果是1的话。太费事!
[解决办法]
这样写比较好
$ cat op.cc

C/C++ code
class complex{public:    complex( double real_ = 0, double imag_ = 0 ): real(real_), imag(imag_){}    complex& operator += ( const complex& other )    {        real += other.real;        imag += other.imag;        return *this;    }    friend const complex operator + ( const complex& lhs, const complex & rhs )    {        complex tmp( lhs );        tmp += rhs;        return tmp;    }  //complex operator + (complex c2);private:  double real;  double imag;};//complex complex::operator(complex c2)//{//  return complex(real+c2.real,imag+c2.imag);//}int main(){    complex c1(5,4),c2(2,10),c3;    c3=c1+c2;    return 0;}
[解决办法]
应该是1 
但编译器是可以可以优化的,
假如 
complex c3 = c1+c2; 
无名对象可以直接作为C3
好像vc2008有一个开关直接可以控制这个,忘记叫啥了
[解决办法]
错鸟。。。

是2 
术语是返回值优化

http://hi.baidu.com/sweeteye/blog/item/c35f91510c42948b8d543022.html
[解决办法]
至少在VC6.0里面是1,我们前几天考试考到了,我晕。差点没做出来……

热点排行