我有这样的事情:
class Bar;
class Foo()
{
public:
Foo() : bar(new Bar());
Bar& GetBar() { return *bar.get(); }
private:
std::unique_ptr<Bar> bar;
};
void main()
{
Foo foo;
auto bar1 = foo.GetBar();
auto bar2 = foo.GetBar(); //address of bar2 != address of bar1. why?
Bar& bar3 = foo.GetBar();
Bar& bar4 = foo.GetBar(); //address of bar3 == address of bar4.
}
看来“自动”变量是副本,因为我没有用相同的内存地址返回 Bars。
如果我将变量显式定义为 Bar 引用 (Bar&),那么一切都会按我的预期进行。
我是用VS2012编译的。这里发生了什么?
auto bar1 = …
总是声明一个副本。auto &&bar1
选择最接近的可能参考类型,这就是您想要的。
auto &&
is the 完美转发 idiom.
您还可以使用其他复合类型auto
, 例如auto const &
or auto *
如果你想具体一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)