Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah C 23 Meningkatkan Pemuatan Terlebih Operator untuk Tatasusunan Berbilang Argumen?

Bagaimanakah C 23 Meningkatkan Pemuatan Terlebih Operator untuk Tatasusunan Berbilang Argumen?

DDD
Lepaskan: 2024-11-20 21:32:14
asal
973 orang telah melayarinya

How does C  23 Enhance Operator Overloading for Multi-Argument Arrays?

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];
        }
};
Salin selepas log masuk

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];       
        }
};
Salin selepas log masuk

Menggunakan sintaks ini, anda boleh mengakses elemen kelas Matriks menggunakan berbilang indeks seperti berikut:

Matrix matrix;
int value = matrix[2, 5, 7];
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan