string::size_type 类型
string::size_type是无符号整形,所以有时候与int混用会出现问题。
例如s.size() < n,如果n是一个int类型,那么一旦n小于0,那么这个几乎都等于true,因为表达式中既有带符号类型又有无符号类型,带符号类型会自动转化为无符号类型,所以n如果是负数,那么就相当于n的绝对值对无符号类型表示数值总数取模后的余数。
所以一个表达式用有了size()函数(vector等很多size()函数也是无符号类型)就不要用int了!!! 当要用string的下标时,可以采用:for(decltype(s.size()) i = 0 ; i != s.size() ; ++i)来访问string的元素。
字面值和string对象相加
使用 + 运算符时,要确保 + 两侧的运算对象至少有一个是stirng
string s = "hello " + ", "; // 错误
string s = "hello " + ", " + s; //错误
string s = "hello " + (", " + s); // 正确
string s = s + "hello " + ", "; //正确
c++ 中字符串字面值并不是string 的对象
