在C 11 中,auto 關鍵字提供了一種便利的方法來根據變數的初始值設定項自動推斷變數的類型。但是,關於 auto 是否會解析為值或引用,需要考慮某些因素。
規則很簡單:它取決於變數的宣告方式。
<code class="cpp">int i = 5; auto a1 = i; // value auto &a2 = i; // reference</code>
在第一種情況下,a1 是一個值,因為它沒有被宣告為引用。在第二種情況下,a2 是一個引用,因為它被明確地宣告為 1。
讓我們將此規則應用於您提供的範例:
以下程式碼使用模板元程式設計展示了此行為:
<code class="cpp">#include <typeinfo> #include <iostream> template< typename T > struct A { static void foo(){ std::cout << "value" << std::endl; } }; template< typename T > struct A< T&> { static void foo(){ std::cout << "reference" << std::endl; } }; float& bar() { static float t=5.5; return t; } int main() { int i = 5; int &r = i; auto a1 = i; auto a2 = r; auto a3 = bar(); A<decltype(i)>::foo(); // value A<decltype(r)>::foo(); // reference A<decltype(a1)>::foo(); // value A<decltype(a2)>::foo(); // value A<decltype(bar())>::foo(); // reference A<decltype(a3)>::foo(); // value }</code>
輸出:
value reference value value reference value
輸出:
輸出:輸出:這確認了auto 的類型是由它的聲明決定的,而不是由它的初始化器的類型決定的。以上是C 11 中的「auto」何時推導出數值或引用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!