C 11 "auto" Jenis Potongan: Menyelesaikan Rujukan vs. Nilai
Dalam C 11, kata kunci "auto" menyediakan cara yang mudah untuk membuat kesimpulan secara automatik jenis pembolehubah. Walau bagaimanapun, apabila menggunakan "auto", adalah penting untuk memahami peraturan yang menentukan sama ada ia menyelesaikan kepada nilai atau rujukan.
Taip Peraturan Potongan untuk "auto":
Peraturan asas ialah "auto" mentafsirkan pengisytiharan pembolehubah itu sendiri, bukan jenis yang diwakilinya. Oleh itu, contoh berikut jelas menunjukkan bahawa "auto" menyelesaikan kepada nilai:
<code class="cpp">auto i = v.begin(); // Copy, as begin() returns an iterator by value</code>
Walau bagaimanapun, dalam senario yang lebih kompleks, perbezaannya mungkin kurang jelas. Pertimbangkan contoh berikut:
<code class="cpp">const std::shared_ptr<Foo>& get_foo(); auto p = get_foo(); // Copy or reference?</code>
Dalam kes ini, "auto" menyimpulkan jenis daripada jenis pulangan fungsi get_foo(), yang merupakan rujukan kepada std::shared_ptr
<code class="cpp">static std::shared_ptr<Foo> s_foo; auto sp = s_foo; // Copy or reference?</code>
Di sini, "auto" menyimpulkan jenis daripada pengisytiharan s_foo, iaitu std::shared_ptr
<code class="cpp">std::vector<std::shared_ptr<Foo>> c; for (auto foo: c) { // Copy for every loop iteration?</code>
Dalam kes ini, "auto" menyimpulkan jenis daripada jenis lelaran vektor. Iterator mengembalikan std::shared_ptr
Kesimpulan:
Peraturan untuk potongan jenis "auto" adalah mudah: ia mengikut pengisytiharan pembolehubah itu sendiri. Untuk menyelesaikan rujukan, gunakan ampersand dalam pengisytiharan (auto &ref = ...). Jika tidak, "auto" akan menyimpulkan jenis nilai.
Atas ialah kandungan terperinci Apabila menggunakan \'auto\' dalam C 11, bagaimanakah ia menentukan sama ada pembolehubah ialah rujukan atau nilai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!