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