1. 程式人生 > >C++學習筆記26 size()、length()等函式的返回值的問題

C++學習筆記26 size()、length()等函式的返回值的問題

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的時候一定要注意使用。