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中文網其他相關文章!