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

DDD
Lepaskan: 2024-11-20 21:32:14
asal
877 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!

sumber:php.cn
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