string::size_type 是什么定义类型?

changeme(我本楚狂人)回复于 2004-07-05 00:10:17 得分 0

 

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节:数值npos的意义。  

你可能感兴趣的:(String,编译器)