C 11 “auto”类型推导:解析引用与值
在 C 11 中,“auto”关键字提供了一种便捷的方法自动推断变量的类型。但是,在使用“auto”时,必须了解确定其解析为值还是引用的规则。
“auto”的类型推导规则:
基本规则是“auto”解释变量本身的声明,而不是它代表的类型。因此,下面的示例清楚地表明“auto”解析为一个值:
<code class="cpp">auto i = v.begin(); // Copy, as begin() returns an iterator by value</code>
但是,在更复杂的场景中,区别可能不太明显。考虑以下示例:
<code class="cpp">const std::shared_ptr<Foo>& get_foo(); auto p = get_foo(); // Copy or reference?</code>
在这种情况下,“auto”从以下推导出类型get_foo() 函数的返回类型,它是对 std::shared_ptr
<code class="cpp">static std::shared_ptr<Foo> s_foo; auto sp = s_foo; // Copy or reference?</code>
这里,“auto”从以下推导出类型s_foo 的声明,它是一个静态 std::shared_ptr
<code class="cpp">std::vector<std::shared_ptr<Foo>> c; for (auto foo: c) { // Copy for every loop iteration?</code>
在这种情况下,“auto”推导出type 来自向量的迭代器类型。迭代器返回 std::shared_ptr
结论:
“auto”类型推导的规则很简单:它遵循变量本身的声明。要解析为引用,请在声明中使用 & 符号 (auto &ref = ...)。否则,“auto”将推导出值类型。
以上是在C 11中使用'auto”时,如何确定变量是引用还是值?的详细内容。更多信息请关注PHP中文网其他相关文章!