Rumah >pembangunan bahagian belakang >C++ >Bolehkah `auto` Menyimpulkan Jenis Peribadi dalam C?

Bolehkah `auto` Menyimpulkan Jenis Peribadi dalam C?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-19 20:51:12143semak imbas

Can `auto` Deduce Private Types in C  ?

Menggunakan 'auto' pada Jenis Peribadi

Dalam C , nampaknya berlawanan dengan intuisi bahawa seseorang boleh menggunakan 'auto' dengan jenis peribadi, kerana ditunjukkan dalam kod berikut:

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

Biasanya, adalah dijangkakan bahawa percubaan untuk mengakses peribadi taip 'Bar' terus (cth., Foo::Bar b = f.Baz();) akan mengakibatkan ralat. Walau bagaimanapun, ini tidak berlaku apabila menggunakan 'auto':

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

Tingkah laku ini timbul kerana persamaan antara peraturan 'auto' dan potongan jenis templat. Sama seperti cara jenis peribadi boleh dihantar ke fungsi templat:

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

int main() {
    Foo f;
    fun(f.Baz());         // ok
}

Keupayaan ini berpunca daripada fakta bahawa walaupun nama jenis peribadi mungkin tidak boleh diakses, jenis itu sendiri kekal boleh digunakan. Akibatnya, 'auto' dapat menyimpulkan jenis dengan betul dan menetapkannya kepada pembolehubah 'b', walaupun ia jenis peribadi.

Atas ialah kandungan terperinci Bolehkah `auto` Menyimpulkan Jenis Peribadi dalam C?. 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