string的size操作返回的并不是一个int,而是string::size_type
这个类型有一个重要的细节:他是一个无符号类型的值,也就是类似于unsigned int这样的值。
那么随之而来的就有一个问题:如果在表达式中混用了string.size()和有符号数,会有意想不到的效果。因为在比较无符号数和有符号数时,有符号数会被自动转化为无符号数。这也就意味着如果有下面的代码:
s.size() < n这个判定将是true!
因为-1被转化为了无符号数,也就是4294967295,所以s的长度4当然小于这个值。
因此,我们需要切记:如果一个表达式中已经有了size()函数,就不要再使用有符号数了。