Rumah > pembangunan bahagian belakang > C++ > Mengapakah `auto` Boleh Mengakses Jenis C Peribadi Apabila Akses Terus Dilarang?

Mengapakah `auto` Boleh Mengakses Jenis C Peribadi Apabila Akses Terus Dilarang?

Mary-Kate Olsen
Lepaskan: 2024-12-16 06:31:11
asal
810 orang telah melayarinya

Why Can `auto` Access Private C   Types When Direct Access Is Forbidden?

Jenis Auto dan Peribadi: Menyingkap Teka-teki Kebolehcapaian

Dalam alam C , kepelbagaian auto sering menimbulkan rasa ingin tahu dan kadangkala kebingungan. Satu pemerhatian yang membingungkan timbul apabila menggunakan auto dengan jenis peribadi.

Pertimbangkan coretan kod berikut, yang secara mengejutkan menyusun tanpa ralat:

class Foo {
struct Bar { int i; };
public:
    Bar Baz() { return Bar(); }
};

int main() {
    Foo f;
    auto b = f.Baz();         // ok
    std::cout << b.i;
}
Salin selepas log masuk

Tingkah laku tidak konvensional ini menimbulkan persoalan: mengapa kita boleh mengakses jenis peribadi melalui auto manakala akses terus dilarang?

Untuk merungkai enigma ini, kita mesti mendalami mekanik auto. Peraturan potongan jenisnya sebahagian besarnya mencerminkan templat C. Pemerhatian ini berlaku untuk sampel kod yang disebutkan di atas. Sama seperti kita boleh menghantar objek jenis peribadi sebagai argumen kepada fungsi templat:

template <typename T>
void fun(T t) {}

int main() {
    Foo f;
    fun(f.Baz());         // ok
}
Salin selepas log masuk

kita juga boleh membuat kesimpulan jenisnya menggunakan auto. Ini kerana walaupun nama jenis itu sendiri kekal tidak boleh diakses, maklumat jenis masih tersedia. Ini membenarkan pengembalian jenis peribadi kepada kod pelanggan, membenarkan akses yang dilarang melalui auto.

Atas ialah kandungan terperinci Mengapakah `auto` Boleh Mengakses Jenis C Peribadi Apabila Akses Terus Dilarang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan