Semantik "auto" C 11
Dalam C 11, kata kunci "auto" membenarkan pengkompil secara automatik menyimpulkan jenis a pembolehubah. Memahami peraturan untuk potongan ini adalah penting apabila menentukan sama ada "auto" akan menghasilkan nilai atau jenis rujukan.
Jenis Potongan untuk Nilai dan Rujukan
Yang utama prinsip yang mengawal jenis potongan ialah jenis "auto" ditentukan dengan cara ia diisytiharkan. Contohnya:
<code class="cpp">int i = 5; auto a1 = i; // value auto &a2 = i; // reference</code>
Dalam contoh di atas, "a1" disimpulkan sebagai nilai integer, manakala "a2" disimpulkan sebagai rujukan integer.
Contoh
1. Mengembalikan Rujukan:
<code class="cpp">const std::shared_ptr<Foo>& get_foo(); auto p = get_foo();</code>
Dalam kes ini, "auto" menyimpulkan jenis rujukan kerana "get_foo()" mengembalikan rujukan const.
2. Penunjuk Statik:
<code class="cpp">static std::shared_ptr<Foo> s_foo; auto sp = s_foo;</code>
Di sini, "auto" menyimpulkan jenis nilai kerana "s_foo" ialah penunjuk statik, yang bukan rujukan.
3. Melingkar Atas Bekas Penunjuk:
<code class="cpp">std::vector<std::shared_ptr<Foo>> c; for (auto foo : c) {</code>
Dalam gelung ini, "auto" memastikan bahawa "foo" disimpulkan sebagai penuding dikongsi kepada Foo. Setiap lelaran mencipta salinan nilai penuding.
Kesimpulan
Untuk meringkaskan, peraturan potongan jenis untuk "auto" dalam C 11 adalah mudah. Jika ungkapan permulaan ialah nilai, "auto" menyimpulkan jenis nilai. Jika ungkapan permulaan ialah rujukan, "auto" menyimpulkan jenis rujukan. Memahami peraturan ini adalah penting untuk penggunaan "auto" yang berkesan dan mengelakkan tingkah laku yang tidak dijangka.
Atas ialah kandungan terperinci Bilakah \'auto\' Menyimpulkan Nilai berbanding Rujukan dalam C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!