这是一个双重问题。 把函数的返回值赋给引用变量是否可行?例如:
Foo FuncBar()
{
return Foo();
}
// some where else
Foo &myFoo = FuncBar();
这样做可以吗?我理解FuncBar()
返回一个Foo对象,现在myFoo
是对它的引用。
问题的第二部分。这是一种优化吗?如果你在循环中经常这样做,那么这样做会更好吗?
Foo &myFoo = FuncBar();
或者Foo myFoo = FuncBar();
而且要考虑变量的使用情况,使用ref会不会导致更慢的解引用速度?
std::string*const&
或其他垃圾,但我认为可以安全地假设在这里不考虑typedef
。不要说了,我知道假设是邪恶的。但是,“根据标准不应编译”或类似的说法确实更好一些。 - Christian RauFoo
实际上是一个const
的typedef
或者Foo
包含一个operator Foo&()
,那么Foo& myFoo = fooBar();
才是合法的。这两种情况似乎都不是“普遍”的情况。如果我提供一个空的class Foo
定义,则给定的代码在 g++ 中不能编译,并在 VC++ 中给出警告“使用了非标准扩展”。 - James KanzeFoo& myFoo = fooBar();
在fooBar
返回引用的情况下也是合理的;例如,使用类似于std :: map <> :: operator []
的东西初始化引用并不罕见。 我只是在严格讨论fooBar
返回对象的情况。 - James Kanze