字符数据类型在整数类型下列出

时间:2018-03-14 09:43:11

标签: c++

我正在学习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类型会有任何性能问题吗?

3 个答案:

答案 0 :(得分:1)

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

(暂无评论)

答案 1 :(得分:0)

对于您提供的示例,使用unsigned char非常好。如果您致电ar1[index]unsigned char将在通话前转换为size_t,将会发生什么情况;由于已知unsigned char比size_t更小或相同,因此编译器不会发出警告。

  

你节省了什么记忆吗?

好;在[]的电话之外是的。由于类型是在通话时转换的,因此您最终不得不使用超过那么多的内存,因为您无法通过引用传递该项目。另一方面,如果您的index变量将持续该程序的生命周期;你计划有很多这些;那么节省空间可以让它值得一试。

答案 2 :(得分:0)

标准采用了一种语言的微妙之处。它描述了&#34;有符号整数类型&#34;,&#34;无符号整数类型&#34;和&#34;整数类型&#34; (a.k.a&#34;整数类型&#34;),boolcharchar16_­tchar32_­twchar_­t,以及已签名和无符号整数。

cppreference中基本类型描述的标题是非规范性的,并且存在以强调字符类型代表字符值,以及整数。