Operatorüberladung für Arrays mit mehreren Argumenten in C
In C ist es möglich, einen Array-Operator zu definieren, der mehrere Argumente für den Zugriff benötigt die Elemente eines Arrays effizient. Bisher war es jedoch nicht möglich, den Standard-Array-Operator ([]) zu überladen, um mehr als ein Argument zu akzeptieren. Diese Einschränkung schränkte die Erstellung benutzerdefinierter Array-ähnlicher Klassen ein, die mehrere Indizes erforderten, um auf ihre Elemente zuzugreifen.
Problemumgehung vor C 23
Um dieses Problem zu beheben, gibt es eine Problemumgehung konnte vor C 23 verwendet werden. Anstatt den [] zu überladen, würden Programmierer den ()-Operator überladen und die zusätzlichen Parameter als Argumente für den Funktionsaufruf angeben. Hier ist ein Beispiel:
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]; } };
Dieser Ansatz ermöglichte es Programmierern, ähnliche Funktionen zu erreichen, ohne die C-Sprachregeln zu verletzen.
C 23-Verbesserung
Mit Mit der Einführung von C 23 wurde der Sprachstandard aktualisiert, um die Übergabe mehrerer tiefgestellter Argumente an den []-Operator zu ermöglichen. Diese Änderung bietet eine natürlichere und prägnantere Syntax für die Arbeit mit Arrays, die mehrere Indizes für die Indizierung erfordern.
Beispiel
Der folgende Code veranschaulicht die Syntax für die Operator[]-Überladung mit mehreren Argumenten in 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]; } };
Mit dieser Syntax können Sie mit auf Elemente der Matrix-Klasse zugreifen mehrere Indizes wie folgt:
Matrix matrix; int value = matrix[2, 5, 7];
Das obige ist der detaillierte Inhalt vonWie verbessert C 23 die Operatorüberladung für Arrays mit mehreren Argumenten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!