Rumah >pembangunan bahagian belakang >C++ >Jenis Auto vs. Peribadi: Mengapa Percanggahan dalam Perisytiharan Pembolehubah?

Jenis Auto vs. Peribadi: Mengapa Percanggahan dalam Perisytiharan Pembolehubah?

Barbara Streisand
Barbara Streisandasal
2024-12-17 10:01:25107semak imbas

Auto vs. Private Types: Why the Discrepancy in Variable Declaration?

Jenis Auto dan Peribadi: Mengapa Percanggahan?

Dalam kod yang disediakan, menggunakan auto untuk mengisytiharkan pembolehubah b yang menerima nilai pulangan daripada f.Baz() berjaya, semasa menggunakan jenis eksplisit Foo::Bar mengakibatkan ralat. Ketidakkonsistenan ini telah membingungkan ramai pembangun.

Peraturan untuk potongan automatik biasanya mengikut peraturan potongan jenis templat. Ini bermakna, sama seperti anda boleh menghantar objek jenis peribadi kepada fungsi templat, anda juga boleh mengisytiharkan pembolehubah jenis tersebut menggunakan auto.

Sebabnya terletak pada hakikat bahawa, manakala nama peribadi jenis tidak boleh diakses, jenis itu sendiri kekal boleh digunakan. Ini jelas dalam keupayaan untuk mengembalikan objek jenis peribadi kepada kod klien. Pengkompil boleh menyimpulkan jenis nilai yang dikembalikan, walaupun nama jenis itu tidak didedahkan.

Dalam kes auto, pengkompil melakukan potongan jenis berdasarkan ungkapan yang diikutinya. Memandangkan f.Baz() mengembalikan objek jenis Foo::Bar, pengkompil memberikan auto jenis Foo::Bar. Walau bagaimanapun, kerana nama Foo::Bar adalah peribadi, pengkompil tidak boleh mencipta pembolehubah jenis itu secara langsung. Sebaliknya, ia menggunakan jenis tanpa nama yang mempunyai ahli dan sifat yang sama seperti Foo::Bar. Ini membolehkan b mengakses ahli i, walaupun nama jenis eksplisit tidak boleh diakses.

Atas ialah kandungan terperinci Jenis Auto vs. Peribadi: Mengapa Percanggahan dalam Perisytiharan Pembolehubah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn