我正在使用固定宽度的整数类型 std::int8_t,std::uint8_t它们包含在C++中,因为C++ 11(标题<cstdint>).我使用gcc编译器进行c ++编程(Linux,gcc --version 4.8.2).
我的机器上的线条
#include <cstdint>
#include <type_traits>
//...
std::cout << std::is_same<std::uint8_t,unsigned char>::value << std::endl;
std::cout << std::is_same<std::int8_t,char>::value << std::endl;
Run Code Online (Sandbox Code Playgroud)
给出输出
1
0
Run Code Online (Sandbox Code Playgroud)
换句话说:std::uint8_t是这样实现的unsigned char,但std::int8_t 不是作为实现char!我没有(合理的)想法它是如何std::int8_t实现的char.问题:如何解释这个结果?
可能他们使用了signed char,这是明智的,因为编译器选项(在gcc -fsigned-char和中-funsigned-char)可以改变plain的签名char.
请注意char,signed char并且unsigned char保证是不同的类型,因此,即使您的编译器char已签名,也不会被认为是相同的,这是正常的signed char.
char和signed char之间的区别只是正式的吗?
没有; char可以是签名或无符号,具体取决于编译器和编译器选项; signed char总是签字,无论如何.
(现在,如果你问我,平原char应该永远unsigned,但这只是我的意见)