簡體   English   中英

string::at 和 string::operator[] 有什么區別?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM