Penghuraian Paling Menjengkelkan: Membongkar Kekaburan dalam C 11
Kekaburan "penghuraian paling menjengkelkan" dalam C 11 muncul dengan sendirinya apabila menggunakan pemula seragam, seperti yang dibuktikan dalam coretan kod berikut:
<code class="cpp">#include <iostream> class Timer { public: Timer() {} }; int main() { auto dv = Timer(); // Ambiguity: Object or function call? int time_keeper(Timer()); // Ambiguity: Pointer or call? return 0; }</code>
Memahami Ungkapan Pertama (auto dv = Timer())
Dalam ungkapan pertama, kata kunci auto membayangkan bahawa jenis dv disimpulkan daripada pemula di sebelah kanan tanda sama (=). Pemula ialah panggilan kepada pembina Pemasa tanpa hujah, yang mengembalikan objek Pemasa. Oleh itu, dv ialah objek jenis Pemasa.
Memahami Ungkapan Kedua (int time_keeper(Timer()))
Dalam ungkapan kedua, kesamaran timbul kerana pengkompil tidak boleh menentukan sama ada Pemasa() ialah panggilan fungsi atau objek jenis Pemasa yang diluluskan melalui rujukan.
Walau bagaimanapun, kerana fungsi mereput kepada penunjuk apabila dihantar sebagai hujah, jenis penjaga_masa yang sebenar ialah int(Pemasa(*)()), yang menyelesaikan masalah kekaburan yang memihak kepada tafsiran penunjuk kepada fungsi.
Atas ialah kandungan terperinci Parse Paling Menjengkelkan: Pemasa() - Panggilan Objek atau Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!