C 中多參數陣列的運算子重載
在C 中,可以定義一個需要多個參數來存取的陣列運算符有效地取得數組的元素。然而,以前不可能重載預設數組運算子 ([]) 以接受多個參數。此限制限制了需要多個索引才能存取其元素的自訂類別數組類別的建立。
Pre-C 23 解
要解決此問題,有一個解決方法可以在 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 增強
與隨著 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中文網其他相關文章!