使用Operator[] 與at() 存取Const 映射中的元素
使用常數std::map 時,存取使用運算符[] 的元素可能會出現問題。雖然使用此方法看起來很直觀,但它無法編譯。這是因為如果鍵不存在,operator[] 期望一個非常量映射來修改映射。
但是,還有一個替代方法 at(),它是在 C 11 中專門引入的這個目的。與 operator[] 不同,如果鍵不存在,at() 會拋出 std::out_of_range 異常,而不是插入預設構造的元素。
這種行為與常數映射的概念非常吻合。透過定義 at() 的 const 重載,它允許安全有效地存取元素,而不會出現無意的修改。
為了說明這一點,請考慮以下範例:
#include <iostream> #include <map> int main() { std::map<int, char> A; A[1] = 'b'; A[3] = 'c'; const std::map<int, char> B = A; std::cout << B.at(3) << std::endl; // works std::cout << B[3] << std::endl; // cannot access (compile error) }
在這種情況下,在B 上使用operator[] 會導致編譯時錯誤,因為它是const 映射並且無法修改。然而,at() 方法可以完美地工作,因為它知道映射的 const 性質,並且如果鍵不存在則拋出異常。
因此,為了存取 const std::map 中的元素, at() 是建議的、更安全的方法,可以防止意外修改。有關此功能的更多資訊可以在 C 11 標準或與 std::map 類別相關的文件中找到。
以上是Const std::map 存取:「operator[]」與「at()」—您應該使用哪一個?的詳細內容。更多資訊請關注PHP中文網其他相關文章!