Maison > développement back-end > C++ > le corps du texte

Comment C 23 améliore-t-il la surcharge des opérateurs pour les tableaux multi-arguments ?

DDD
Libérer: 2024-11-20 21:32:14
original
877 Les gens l'ont consulté

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

Surcharge d'opérateur pour les tableaux multi-arguments en C

En C , il est possible de définir un opérateur de tableau qui prend plusieurs arguments pour accéder les éléments d’un tableau de manière efficace. Cependant, il n'était auparavant pas possible de surcharger l'opérateur de tableau par défaut ([]) pour accepter plus d'un argument. Cette limitation limitait la création de classes personnalisées de type tableau qui nécessitaient plusieurs index pour accéder à leurs éléments.

Solution de contournement pré-C 23

Pour résoudre ce problème, une solution de contournement pourrait être utilisé avant C 23. Au lieu de surcharger le [], les programmeurs surchargeraient l'opérateur () et spécifieraient les paramètres supplémentaires comme arguments de l'appel de fonction. Voici un exemple :

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];
        }
};
Copier après la connexion

Cette approche a permis aux programmeurs d'obtenir des fonctionnalités similaires sans violer les règles du langage C.

Amélioration C 23

Avec Depuis l'introduction de C 23, la norme de langage a été mise à jour pour permettre de transmettre plusieurs arguments d'indice à l'opérateur []. Ce changement fournit une syntaxe plus naturelle et plus concise pour travailler avec des tableaux qui nécessitent plusieurs index pour l'indexation.

Exemple

Le code suivant illustre la syntaxe de la surcharge d'opérateur[] avec plusieurs arguments en 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];       
        }
};
Copier après la connexion

En utilisant cette syntaxe, vous pouvez accéder aux éléments de la classe Matrix en utilisant plusieurs indices comme suit :

Matrix matrix;
int value = matrix[2, 5, 7];
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal