gpt4 book ai didi

c++ - 'auto' 和显式变量声明的行为不同

转载 作者:IT王子 更新时间:2023-10-28 23:28:07 26 4
gpt4 key购买 nike

我有这样的事情:

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 &&完美转发的成语。

您还可以将其他复合类型与 auto 一起使用,例如 auto const &auto * 如果您想具体一点。

关于c++ - 'auto' 和显式变量声明的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14526252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com