首页  >  文章  >  后端开发  >  C 11 中“auto”什么时候推导出值和引用?

C 11 中“auto”什么时候推导出值和引用?

Patricia Arquette
Patricia Arquette原创
2024-11-03 08:40:03754浏览

When Does

C 11“auto”语义

在 C 11 中,“auto”关键字允许编译器自动推导 a 的类型多变的。在确定“auto”是否会产生值类型或引用类型时,了解此推导的规则至关重要。

值和引用的类型推导

主要控制类型推导的原则是“auto”的类型由它的声明方式决定。例如:

<code class="cpp">int i = 5;
auto a1 = i;    // value
auto &a2 = i;  // reference</code>

在上面的示例中,“a1”被推导为整数值,而“a2”被推导为整数引用。

示例

1。返回引用:

<code class="cpp">const std::shared_ptr<Foo>& get_foo();
auto p = get_foo();</code>

在这种情况下,“auto”推导出引用类型,因为“get_foo()”返回 const 引用。

2.静态指针:

<code class="cpp">static std::shared_ptr<Foo> s_foo;
auto sp = s_foo;</code>

这里,“auto”推导出值类型,因为“s_foo”是静态指针,不是引用。

3.循环指针容器:

<code class="cpp">std::vector<std::shared_ptr<Foo>> c;
for (auto foo : c) {</code>

在此循环中,“auto”确保“foo”被推导为指向 Foo 的共享指针。每次迭代都会创建指针的值副本。

结论

总而言之,C 11 中“auto”的类型推导规则很简单。如果初始化表达式是一个值,则“auto”会推导出值类型。如果初始化表达式是引用,则“auto”推导出引用类型。了解这些规则对于有效使用“自动”并避免意外行为至关重要。

以上是C 11 中“auto”什么时候推导出值和引用?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn