2018-07-02 容器.size()与int比较问题

int maxSize = -1;
string ss = "hello,world.";
if(maxSize < ss.size())
    cout << "ss.size()" << endl;
else
    cout << "maxSize"  << endl;

运行结果是输出maxSize,因为容器.size()的返回值类型是:
vector.size() : vector::size_type
string.size() : string::size_type
...
这些容器.size()都是返回无符号整形。
当maxSize与ss.size()进行比较时会先将maxSize强制类型转换为unsigned类型,此时int 型数据 maxSize = - 1,在计算机存储中int值负数以二进制补码的形式存在(32位为例)-1:1111 1111 1111 1111 1111 1111 1111 1111,而在unsigned中该二进制位代表着unsigned的最大值。
所以可以使用一个int型变量n存储ss的长度。
int n = ss.size();
然后再对n和maxSize进行操作。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容