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]; } };
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]; } };
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];
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!