Pemuatan Terlebih Operator untuk Tatasusunan Berbilang Argumen dalam C
Dalam C , adalah mungkin untuk mentakrifkan operator tatasusunan yang memerlukan berbilang argumen untuk diakses elemen tatasusunan dengan cekap. Walau bagaimanapun, sebelum ini tidak mungkin untuk membebankan operator tatasusunan lalai ([]) untuk menerima lebih daripada satu hujah. Had ini mengehadkan penciptaan kelas seperti tatasusunan tersuai yang memerlukan berbilang indeks untuk mengakses elemennya.
Penyelesaian Pra-C 23
Untuk menangani isu ini, penyelesaian boleh digunakan sebelum C 23. Daripada melebihkan [], pengaturcara akan melebihkan operator () dan menentukan parameter tambahan sebagai hujah untuk panggilan fungsi. Berikut ialah contoh:
class Matrix { private: std::vector<int> m_cells; int m_res; int m_resSqr; public: int& operator()(const int i, const int j) { return m_cells[j * m_res + i]; } };
Pendekatan ini membenarkan pengaturcara mencapai kefungsian yang serupa tanpa melanggar peraturan bahasa C.
Peningkatan C 23
Dengan pengenalan C 23, standard bahasa telah dikemas kini untuk membolehkan berbilang argumen subskrip dihantar kepada operator []. Perubahan ini menyediakan sintaks yang lebih semula jadi dan ringkas untuk bekerja dengan tatasusunan yang memerlukan berbilang indeks untuk pengindeksan.
Contoh
Kod berikut menunjukkan sintaks untuk operator[] terlebih muatan dengan berbilang argumen dalam C 23:
class Matrix { private: std::vector<int> m_cells; int m_res; int m_resSqr; public: const T& operator[](const int i, const int j, const int k) const { return m_cells[k * m_resSqr + j * m_res + i]; } T& operator[](const int i, const int j, const int k) { return m_cells[k * m_resSqr + j * m_res + i]; } };
Menggunakan sintaks ini, anda boleh mengakses elemen kelas Matriks menggunakan berbilang indeks seperti berikut:
Matrix matrix; int value = matrix[2, 5, 7];
Atas ialah kandungan terperinci Bagaimanakah C 23 Meningkatkan Pemuatan Terlebih Operator untuk Tatasusunan Berbilang Argumen?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!