首頁 >後端開發 >C++ >Const std::map 存取:「operator[]」與「at()」—您應該使用哪一個?

Const std::map 存取:「operator[]」與「at()」—您應該使用哪一個?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-03 17:26:14279瀏覽

Const std::map Access: `operator[]` vs. `at()` – Which Should You Use?

使用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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn