C での複数引数配列の演算子のオーバーロード
C では、アクセスするために複数の引数を取る配列演算子を定義できます。配列の要素を効率的に処理します。ただし、以前は、デフォルトの配列演算子 ([]) をオーバーロードして複数の引数を受け入れることができませんでした。この制限により、要素にアクセスするために複数のインデックスを必要とするカスタム配列のようなクラスの作成が制限されました。
C 23 より前の回避策
この問題に対処するには、回避策を使用します。 [] をオーバーロードする代わりに、プログラマは () 演算子をオーバーロードし、追加のパラメーターを関数呼び出しの引数として指定します。以下に例を示します。
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]; } };
このアプローチにより、プログラマーは C 言語のルールに違反することなく同様の機能を実現できました。
C 23 Enhancement
を使用C 23 の導入により、言語標準が更新され、複数の添え字引数を [] 演算子に渡せるようになりました。この変更により、インデックス付けに複数のインデックスが必要な配列を操作するための、より自然で簡潔な構文が提供されます。
例
次のコードは、operator[] オーバーロードの構文を示しています。 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]; } };
これを使用する構文では、次のように複数のインデックスを使用して Matrix クラスの要素にアクセスできます:
Matrix matrix; int value = matrix[2, 5, 7];
以上がC 23 は複数引数配列の演算子のオーバーロードをどのように強化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。