Edd*_*223 16 c++ return reference
这是一个两部分问题.可以将函数的返回值赋给引用吗?如
Foo FuncBar()
{
return Foo();
}
// some where else
Foo &myFoo = FuncBar();
Run Code Online (Sandbox Code Playgroud)
这个可以吗?我的理解是FuncBar()返回一个Foo对象,现在myFoo是对它的引用.
问题的第二部分.这是优化吗?因此,如果你在一个循环中这样做很多时候做得更好
Foo &myFoo = FuncBar();
Run Code Online (Sandbox Code Playgroud)
要么
Foo myFoo = FuncBar();
Run Code Online (Sandbox Code Playgroud)
并且考虑到变量的使用,不会使用ref需要更慢的解引用?
Alo*_*ave 22
Foo &myFoo = FuncBar();
Run Code Online (Sandbox Code Playgroud)
不会编译.它应该是:
const Foo &myFoo = FuncBar();
Run Code Online (Sandbox Code Playgroud)
因为FuncBar()返回一个临时对象(即rvalue),只有lvalues可以绑定到对非const的引用.
安全吗?
是的,这是安全的.
C++标准规定将临时对象绑定到const的引用会延长临时对象到引用本身生命周期的生命周期,从而避免了常见的悬空引用错误.
Foo myFoo = FuncBar();
Run Code Online (Sandbox Code Playgroud)
是复制初始化.
它创建一个由返回的对象的副本,FuncBar()然后使用该副本进行初始化myFoo.myFoo语句执行后是一个单独的对象.
const Foo &myFoo = FuncBar();
Run Code Online (Sandbox Code Playgroud)
将返回的临时值绑定FuncBar()到引用myFoo,请注意这myFoo只是返回的临时的别名而不是单独的对象.