關於string::size_type


size_type其實是string模板類定義的一種類型之一,它與size_of的用法相似,只是它根據存儲的類型返回字符串的長度.對於 string具體化,將根據char返回字符串的長度,在這種情況下,size_type與size_of等效.size_of是一種無符號類型.  
你說的   size_type   其實就是   unsigned   int   類型   其實並不正確,它要看其存儲的類型.

 

size_type實際上是做為解決string類設計上的嚴重失誤而引入的。

size_type是在string類內定義的一個無符號整形類型,由於string類里很多方法的返回值都是size_type類型的,所以必須使用size_type進行類型聲明。
如下:
string   a= "abcdefg ";
string::size_type   idx;
idx   =   a.find( "h ");   //not   found,return   string::npos
if(   idx   ==   string::npos   )     //check   if   not   find
{
  .....
}

由於npos為find返回的特殊值(-1),而不幸的是,size_type類型為unsigned   int,所以
不同的編譯器對npos的理解不同。
試想一下,用8字節來unsigned   int   來表示-1和用4字節表示,值是完全不同的。
這可能是string類設計時的一個致命缺陷,為了兼容和可移植性,
特定義size_type類型,在不同編譯器中,size_type的解釋也不同,這樣就做到了可移植。

以上內容可見
STL:11.2.12節。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM