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!