【问题标题】:character data type is listed under integer type字符数据类型列在整数类型下
【发布时间】:2018-03-14 09:43:11
【问题描述】:

我正在学习 C++,遇到了this 数据类型链接。在第一个表中,即使在有符号和无符号整数类别下也列出了字符类型:

字符类型 char 大小正好是一个字节。至少 8 位。

整数类型(有符号) signed char 与 char 大小相同。至少 8 位。

整数类型(无符号) unsigned char(与其有符号对应的大小相同)

这是什么意思?这是否意味着我们可以使用 char 类型来代替 8 位整数,就像我们通常在 C 中对 8 位数据所做的那样? 例如,下面的代码即使在 C 中也是合法的。

unsigned char index;
int ar1[]={4,5,6,7,8};
for(index=0;index<5;index++)
cout<<ar1[index]<<"\n";

cppreference 没有在整数类别下列出 char。

其次,上述使用 unsigned char 作为索引的方法在 C++ 中是否安全?我们是要在这种用法中节省内存还是不会节省任何东西?或者如果我们使用 char 类型会有任何性能问题吗?

【问题讨论】:

  • cppreference 不是标准化实体,尽管顾名思义,它肯定不是参考。
  • @Jean-BaptisteYunès 然而这是迄今为止我们最好的。
  • 您可以使用任何 c++ 标准草案,在网络上高度可用。 @liliscent 链接是完美的。
  • @Rajesh 更喜欢cppreference.com

标签: c++


【解决方案1】:

我想指出诸如(u)int{n}_t 之类的数据类型的存在,其中 n 是以位为单位的大小,从 c++11 开始,它会处理指定大小的有符号和无符号整数,并且不太可能被误认为是字符。 cppreference

(还不能评论)

【讨论】:

    【解决方案2】:

    对于您给出的示例,使用 unsigned char 非常好。当您调用ar1[index] 时会发生什么是unsigned char 将在调用之前转换为size_t;并且由于已知 unsigned char 比 size_t 更小或大小相同,因此编译器不会发出警告。

    你有没有节省内存?

    好吧;是的,在拨打[] 之外。由于类型是在调用时转换的,因此您最终将不得不使用更多的内存,因为您无法通过引用传递该项目。另一方面,如果您的 index 变量将持续整个程序的生命周期;你计划拥有很多;那么节省空间就值得了。

    【讨论】:

      【解决方案3】:

      标准使用的语言有一些微妙之处。它描述了“有符号整数类型”、“无符号整数类型”和“整数类型”(又名“整数类型”),它们是boolcharchar16_­tchar32_­twchar_­t,以及有符号和无符号整数。

      cppreference 对基本类型的描述中的标题是非规范性的,其存在是为了强调字符类型除了是整数之外还表示字符值。

      【讨论】:

        猜你喜欢
        • 2019-11-29
        • 1970-01-01
        • 1970-01-01
        • 2014-04-18
        • 2014-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-28
        相关资源
        最近更新 更多