当前位置:  开发笔记 > 编程语言 > 正文

string :: size_type而不是int

如何解决《string::size_type而不是int》经验,为你挑选了3个好方法。

空头也有数字.和签名的char一样.

但是这些类型都不能保证足够大以表示任何字符串的大小.

string::size_type保证就是这样.它是一个足以表示字符串大小的类型,无论字符串有多大.

有关为什么需要这样做的简单示例,请考虑使用64位平台.int通常仍然是32位,但你有超过2 ^ 32字节的内存.

因此,如果使用(带符号)int,则无法创建大于2 ^ 31个字符的字符串.但是,size_type在这些平台上将是64位值,因此它可以代表更大的字符串而不会出现问题.



1> jalf..:

空头也有数字.和签名的char一样.

但是这些类型都不能保证足够大以表示任何字符串的大小.

string::size_type保证就是这样.它是一个足以表示字符串大小的类型,无论字符串有多大.

有关为什么需要这样做的简单示例,请考虑使用64位平台.int通常仍然是32位,但你有超过2 ^ 32字节的内存.

因此,如果使用(带符号)int,则无法创建大于2 ^ 31个字符的字符串.但是,size_type在这些平台上将是64位值,因此它可以代表更大的字符串而不会出现问题.


我们在这里讨论哪个64位Linux平台?在x64机器上,我试过它仍然有32位整数.在Cell处理器上,int也是32位.通过扩展,我假设同样适用于PowerPC上的Linux.所以不,Linux ABI因平台而异,我所知道的大多数平台都指定了4位整数,即使在Linux上也是如此.

2> mihai..:

你给出的例子,

const std::string::size_type cols = greeting.size() + pad * 2 + 2;

来自Koenig的Accelerated C++.他还说明了他之后选择的原因,即:

std :: string类型将size_type定义为用于保存字符串中字符数的适当类型的名称.每当我们需要一个局部变量来包含字符串的大小时,我们应该使用std :: string :: size_type作为该变量的类型.

我们给cols一个std :: string :: size_type类型的原因是为了确保cols能够包含greeting中的字符数,无论这个数字有多大.我们可以简单地说cols有int类型,事实上,这样做可能会起作用.但是,cols的值取决于程序输入的大小,我们无法控制输入的长度.可以想象,有人可能会给我们的程序一个字符串,以至于int不足以包含它的长度.



3> Marc Mutz - ..:

嵌套的size_typetypedef是STL兼容容器(std::string恰好是)的要求,因此通用代码可以选择正确的整数类型来表示大小.

在应用程序代码中使用它没有意义,size_t完全int没问题(不是,因为它已签名,您将获得签名/未签名的比较警告).


有人会说没有意义吗?也许如果你不想要最便携的代码,可以使用`size_t`.或者对于今天的大多数实际情况,你可以使用`size_t`.但如果没有意义,那么`size_type`将不存在,现在呢?
推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有