hce_nsysu
111年
計算機概論與程式設計
第 70 題
The array subscript operator `[]`, when overloaded, cannot:
- A Be used with linked list classes.
- B Take multiple values inside (e.g., [4,8]).
- C Take a double as an operand.
- D Take user-defined objects as operands.
- E None of the above.
思路引導 VIP
請思考一下:當我們在使用如 +、- 或 [] 這些運算子時,它們在程式碼中的「外型」與一般的函式呼叫(如 func(a, b, c))有什麼根本上的差異?這種外型上的固定結構,會如何限制我們在多載時所能傳遞的參數數量呢?
🤖
AI 詳解
AI 專屬家教
恭喜你答對了!這代表你對 C++ 運算子多載(Operator Overloading)的語法規範有著非常紮實的理解。這道題目精準地測試了開發者是否混淆了「參數型別的彈性」與「語法結構的限制」。
下標運算子的語法限制
在 C++ 標準中(特別是 C++23 以前),下標運算子 [] 被嚴格定義為只能接受一個參數。雖然我們可以自由定義這個參數的型別,例如使用 double(選項 C)來做內插搜尋,或是使用自定義物件(選項 D)來實現類似字典(Map)的鍵值存取,甚至在鏈結串列(Option A)中模擬陣列行為,但我們無法改變它「一對一」的語法本質。如果你嘗試寫出 array[4, 8],編譯器會將內部的逗號視為「逗號運算子」,最終只會將最後一個數值 8 傳入函數,而無法達成傳遞多個獨立座標的目的。
▼ 還有更多解析內容