http://definedbehavior.blogspot.tw/2011/08/value-semantics-copy-elision.html
class Mars
{
private:
int inum ;
public:
Mars(int inum_=0):inum(inum_)
{
cout << "default " << endl ;
}
Mars(const Mars& m)
{
cout << "copy cons" << endl ;
inum = m.getnum();
}
Mars(Mars&& m)
{
cout << "move cons" << endl ;
inum = m.getnum();
}
Mars& operator=(const Mars& m)
{
cout << "copy assign" << endl ;
inum = m.getnum(); return *this;
}
Mars& operator=(Mars&& m)
{
cout << "move assign" << endl ;
inum = m.getnum(); return *this;
}
~Mars(){}
int getnum() const { return inum; }
void Print() const { cout << inum << endl; }
} ;
Mars f(int ix)
{
Mars m(ix) ;
return m ;
}
Mars g(Mars x)
{
return x ;
}
int main()
{
const Mars& m = f(99) ;
m.Print() ;
Mars x = f(999) ;
x.Print() ;
Mars xx = g( f(123) ) ;
xx.Print() ;
}
output :
default
99
default
999
default
copy cons
123
注意 , 最後一個 g( f(123) ) compile 不會採取 copy elision , 雖然看起來應該可以 ....!!
留言列表