// 雙下標運算符重載
int& operator()(int, int); // 非常量版本
int& operator()(int, int) const; // 常量版本
兩個重載函數參數列表完全相同,僅 const 修飾符不同。當對 const 對象調用時編譯器無法區分應調用哪個版本(因為返回類型 int& 相同,且參數無差異),導致重載解析失敗或運行時歧義。
// 非常量對象:返回引用,可作左值
int& operator()(int row, int col) {
// 邊界檢查...
return ptr[row * cols + col];
}
// 常量對象:返回 const 引用,僅可讀
const int& operator()(int row, int col) const {
// 邊界檢查...
return ptr[row * cols + col];
}
const int&,非常量版本返回 int&。const_cast 復用:
int& operator()(int r, int c) {
return const_cast(static_cast(*this)(r, c));
}
assert 或拋出異常)。operator= 返回類型應為 DoubleScriptedArray& 而非 const DoubleScriptedArray&(鏈式賦值需非常量引用)。operator<<、operator>> 應聲明為 friend 並定義在類外,第一參數為流引用。