考慮下面的代碼:C++編譯器是否在按值返回時避免複製?
LargeObject getLargeObject()
{
LargeObject glo;
// do some initialization stuff with glo
return glo;
}
void test()
{
LargeObject tlo = getLargeObject();
// do sth. with tlo;
}
一個簡單的編譯器將創建getLargeObject()棧上的局部LargeObject GLO和然後將其指定在測試TLO返回時,它涉及到一個複製操作()。
但是不應該有一個聰明的編譯器意識到glo將會被分配給tlo,因此只是首先使用tlo的內存來避免複製操作?導致一些(功能)像:
void getLargeObject(LargeObject &lo)
{
// do init stuff
}
void test()
{
LargeObject lo;
getLargeObject(lo);
}
我的猜測是,編譯器做類似的事情。但它可以一直完成嗎?有沒有不能像這樣優化的情況?我怎麼知道我的返回值是否被複制?
http://en.wikipedia.org/wiki/Return_value_optimization –
@OliCharlesworth:這是一個答案! –
指向文章的鏈接不是答案。 –