我正在学习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类型会有任何性能问题吗?
答案 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;),bool
,char
,char16_t
,char32_t
,
wchar_t
,以及已签名和无符号整数。
cppreference中基本类型描述的标题是非规范性的,并且存在以强调字符类型代表字符值,以及整数。