【发布时间】:2011-11-22 23:40:10
【问题描述】:
考虑以下代码:
LargeObject getLargeObject()
{
LargeObject glo;
// do some initialization stuff with glo
return glo;
}
void test()
{
LargeObject tlo = getLargeObject();
// do sth. with tlo;
}
一个简单的编译器会在 getLargeObject() 堆栈上创建一个本地 LargeObject glo,然后在返回时将其分配给 test() 中的 tlo,这涉及到复制操作。
但是一个聪明的编译器不应该意识到 glo 将被分配给 tlo 并因此首先使用 tlo 的内存来避免复制操作吗?导致一些东西(功能上)像:
void getLargeObject(LargeObject &lo)
{
// do init stuff
}
void test()
{
LargeObject lo;
getLargeObject(lo);
}
我的猜测是,编译器会做类似的事情。但总能做到吗?有没有不能这样优化的情况?如何知道我的返回值是否被复制?
【问题讨论】:
-
@OliCharlesworth:这就是答案!
-
文章链接不是答案。
-
-1:这个问题清楚地表明没有研究工作 - 这个主题在整个互联网上都有。
-
@Ben - 关于你的最后一个问题,另请参阅:stackoverflow.com/questions/6140438/…
标签: c++ copy return-value compiler-optimization