2013-02-05 69 views
5

我在學校教過string::at,但是通過探索字符串庫,我看到了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); 

它們基本上是在輸出方面是相同的,但有一些細微的差別,我不知道的?

+3

你嘗試爲每一個參考更快?有一個區別,在比較引用時應該很容易找到。 – chris

+1

等待,您在查看書籍或在線參考之前,是否決定從'.at()'切換到'operator []'*? – us2012

+0

好吧,我讀運算符[]是更快,但不知道爲什麼... –

回答

15

是的,有一個重要區別:使用.at()確實對指數一系列檢查合格,並拋出一個異常,如果它是在字符串的結束,而只是operator[]帶來在這種情況下未定義行爲

10

at的界限檢查,類型std::out_of_range的異常將被拋出無效訪問。

operator[]不檢查邊界因此,如果您嘗試訪問超出字符串的範圍,可能會非常危險。雖然它比at快一點。

4

的std :: string ::在

返回在指定位置POS一個參考字符。執行邊界檢查,std :: out_of_range類型的異常將在無效訪問時拋出。

串::操作符[]

返回在指定的位置POS一個參考字符。不執行邊界檢查。與operator[]訪問的界限是不確定的行爲。

string::operator[]應silghtly比std::string::at

看到reference

相關問題