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中文网其他相关文章!