C++學習筆記26 size()、length()等函式的返回值的問題
阿新 • • 發佈:2019-02-08
c++ string類length()、size()等函式返回值屬於無符號數
首先看一個例子
string s = "";
for(int i = 0; i < s.length() - 1; ++i)
{
cout << "s.length = " <<s.length() << endl;
break;
}
輸出結果:
s.length = 0
string類的length()或者size()函式返回的是unsigned integer(無符號數)型別。而用在for迴圈時,正常不會出錯,但作為判斷條件時,當s.length()等於0時,s.length()-1 不等於 -1
看下面的例子:
string s = "";
for(int i = 0; i < s.length() - 1; ++i)
{
cout << "s.length - 1 = " << s.length()-1 << endl;
break;
}
輸出結果:
s.length()-1 = 4294967295
可以將例2中程式碼改為如下,強制型別轉換一下。
string s = "";
for(int i = 0; i < (int)s.length() - 1; ++i)
{
cout << "(int)s.length - 1 = " << s.length()-1 << endl;
break;
}
輸出結果:
(int)s.length - 1 = -1
總結:string類的length()函式和size()函式一定要注意返回的是無符號數,當出現string物件length為0,對於string物件的操作更要注意,以防出錯。其實不止string的size和length函式,基本資料型別的size和length的資料型別是size_t,這個資料型別是為了遮蔽不同平臺的異構性二設定的一個型別,其實就是unsigned interger ,所以在size為0的時候一定要注意使用。