Dalam C 11, kata kunci auto menawarkan cara yang mudah untuk menyimpulkan secara automatik jenis pembolehubah berdasarkan pemulanya . Walau bagaimanapun, terdapat нюансы tertentu untuk dipertimbangkan sama ada auto akan menyelesaikan kepada nilai atau rujukan.
Peraturannya adalah mudah: ia bergantung pada cara pembolehubah diisytiharkan.
<code class="cpp">int i = 5; auto a1 = i; // value auto &a2 = i; // reference</code>
Dalam kes pertama, a1 ialah nilai kerana ia tidak diisytiharkan sebagai rujukan. Dalam kes kedua, a2 ialah rujukan kerana ia telah diisytiharkan secara eksplisit sebagai satu.
Mari gunakan peraturan ini pada contoh yang anda berikan:
Kod berikut menunjukkan tingkah laku ini menggunakan pengaturcaraan meta templat:
<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>
Output:
value reference value value reference value
Ini mengesahkan bahawa jenis auto ditentukan oleh pengisytiharannya, bukan oleh jenis pemulanya.
Atas ialah kandungan terperinci Bilakah `auto` dalam C 11 menyimpulkan nilai atau rujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!