假设有这样一个函数
void SendToTheWorld(const Foo& f);
我需要在发送前预处理Foo
对象
X PreprocessFoo(const Foo& f)
{
if (something)
{
// create new object (very expensive).
return Foo();
}
// return original object (cannot be copied)
return f;
}
用法
Foo foo;
SendToTheWorld(PreprocessFoo(foo));
因此 X PreprocessFoo()
函数应该能够返回原始对象或复制/修改,而不是返回新对象。我不能返回 const Foo&
因为它可能引用一个临时对象。我也不喜欢在堆上创建 Foo
。
完美地,X
应该是 const Foo&
和 Foo
的某种 union ,可以被视为 const Foo&
。知道如何以更优雅的方式做到这一点吗?
我目前的解决方案:
Foo PreprocessFoo(const Foo& f)
{
// create new object (very expensive).
return Foo();
}
用法:
Foo foo;
if (something)
{
SendToTheWorld(PreprocessFoo(foo));
}
else
{
SendToTheWorld(foo);
}
最佳答案
我不是 100% 清楚你的意思,但如果你只是想在返回值中省略不必要的 Foo
拷贝,让你的函数变小(现在,它是)并且依靠优化编译器来解决您的问题。
一旦函数被内联,编译器将删除不必要的 Foo
拷贝。
(有兴趣的请注意:NRVO(命名返回值优化)不能应用于此处,因为无法为所有可能的返回值实例分配唯一的名称。)
关于c++ - 对临时对象的常量引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1339428/