C 23 は複数引数配列の演算子のオーバーロードをどのように強化しますか?

DDD
リリース: 2024-11-20 21:32:14
オリジナル
877 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート