[英]What is the difference between string::at and string::operator[]?
我在學校學習string::at
,但通過探索字符串庫,我看到了string::operator[]
,這是我以前從未見過的。
我現在正在使用operator[]
並且從那以后沒有使用at
,但有什么區別? 下面是一些示例代碼:
std::string foo = "my redundant string has some text";
std::cout << foo[5];
std::cout << foo.at(5);
它們在輸出方面基本相同,但是否有一些我不知道的細微差別?
是的,有一個主要區別:使用.at()
對傳遞的索引進行范圍檢查,如果它超過字符串的末尾,則拋出異常,而operator[]
在這種情況下只會帶來未定義的行為。
at
做邊界檢查,類型的例外std::out_of_range
將無效訪問被拋出。
operator[]
不檢查邊界,因此如果您嘗試訪問超出字符串的邊界,可能會很危險。 它比快一點at
,雖然。
std::string::at
返回對指定位置 pos 處的字符的引用。 執行邊界檢查,無效訪問將拋出 std::out_of_range 類型的異常。
字符串::運算符[]
返回對指定位置 pos 處的字符的引用。 不執行邊界檢查。 使用operator[]
訪問越界是未定義的行為。
string::operator[]
應該比std::string::at
快一點
見參考
是的,有區別, .at() 檢查您嘗試訪問的字符串索引是否超出范圍並在這種情況下拋出 out_of_range 異常。 但 [] 運算符不檢查索引范圍並在超出范圍的情況下顯示未定義的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.