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節。