【发布时间】:2012-02-03 18:56:25
【问题描述】:
假设我有一个函数将返回一个大型数据结构,目的是让调用者立即复制返回值:
Large large()
{
return Large();
}
现在假设我不想依赖任何类型的编译器优化,例如返回值优化等。还假设我不能依赖 C++11 移动构造函数。我想就以下代码的“正确性”收集一些意见:
const Large& large()
{
static Large large;
large = Large();
return large;
}
它应该可以按预期工作,但是即使它是 const 限定的,也返回对静态本地的引用是不是很糟糕?
【问题讨论】:
-
我不确定您要完成什么。在您描述的假设中,第一种方法仍然是正确的。
-
@Rob 最后,我想要返回引用的速度,而不需要让调用者负责内存管理,也不需要对我的编译器做出假设。
-
在这种情况下,没有你的第二个例子不是“正确的”。您在
large()中有一个复制操作,而我认为large()的调用者中有另一个复制操作。在优化不佳的编译器的情况下,您手动“优化”的代码并不比它替换的代码快。在优化编译器的情况下,它更慢。无论哪种情况,都更难维护。 -
@Rob 好点。谢谢!
标签: c++ coding-style static reference return-value