为什么是string::size_type而不是int?---顺便聊聊无符号数和负数的比较

2024-02-06 14:48

本文主要是介绍为什么是string::size_type而不是int?---顺便聊聊无符号数和负数的比较,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      我们先看下面的程序(假设某环境下, 用16位表示整形):

#include <iostream>
#include <string>
#include <cmath>
using namespace std;int main()
{int a = pow(2, 15) - 1; // 假设某环境下, 用16位表示整形cout << a << endl; // a是最大的int值string s(a, 'x');cout << s << endl;s += "test"; // ok, 此时s的长度超出了整形的最大值aint i = 0;for(i = 0; i < s.size(); i++) // 死循环{cout << s[i];}cout << endl << "end" << endl;return 0;
}

 

     需要改为:

 

#include <iostream>
#include <string>
#include <cmath>
using namespace std;int main()
{int a = pow(2, 15) - 1; // 假设某环境下, 用16位表示整形cout << a << endl; // a是最大的int值string s(a, 'x');cout << s << endl;s += "test"; // ok, 此时s的长度超出了整形的最大值astring::size_type i = 0;for(i = 0; i < s.size(); i++) // ok{cout << s[i];}cout << endl << "end" << endl;return 0;
}

      所以, 还是养成好习惯吧。

 

      最后, 我们来欣赏这样一个小程序(一定要小心无符号数和负数的相互作用):

 

#include <iostream>
#include <string>
using namespace std;int main()
{if(strlen("abc") < -1){cout << "yes1" << endl; // 到这个分支}else{cout << "no1" << endl;}if(sizeof("abc") < -1){cout << "yes2" << endl; // 到这个分支}else{cout << "no2" << endl;}if(string("abc").size() < -1){cout << "yes3" << endl; // 到这个分支}else{cout << "no3" << endl;}return 0;
}

     

 

        ok, 先这样。
 

 

 

 

 


 

这篇关于为什么是string::size_type而不是int?---顺便聊聊无符号数和负数的比较的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/684645

相关文章

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

Python如何实现高效的文件/目录比较

《Python如何实现高效的文件/目录比较》在系统维护、数据同步或版本控制场景中,我们经常需要比较两个目录的差异,本文将分享一下如何用Python实现高效的文件/目录比较,并灵活处理排除规则,希望对大... 目录案例一:基础目录比较与排除实现案例二:高性能大文件比较案例三:跨平台路径处理案例四:可视化差异报

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

redis数据结构之String详解

《redis数据结构之String详解》Redis以String为基础类型,因C字符串效率低、非二进制安全等问题,采用SDS动态字符串实现高效存储,通过RedisObject封装,支持多种编码方式(如... 目录一、为什么Redis选String作为基础类型?二、SDS底层数据结构三、RedisObject

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

MySQL中比较运算符的具体使用

《MySQL中比较运算符的具体使用》本文介绍了SQL中常用的符号类型和非符号类型运算符,符号类型运算符包括等于(=)、安全等于(=)、不等于(/!=)、大小比较(,=,,=)等,感兴趣的可以了解一下... 目录符号类型运算符1. 等于运算符=2. 安全等于运算符<=>3. 不等于运算符<>或!=4. 小于运

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

java String.join()方法实例详解

《javaString.join()方法实例详解》String.join()是Java提供的一个实用方法,用于将多个字符串按照指定的分隔符连接成一个字符串,这一方法是Java8中引入的,极大地简化了... 目录bVARxMJava String.join() 方法详解1. 方法定义2. 基本用法2.1 拼接