实现固定宽度整数类型std :: uint8_t和std :: int8_t,C++

spe*_*ber 1 c++ integer c++11

我正在使用固定宽度的整数类型 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.问题:如何解释这个结果?

Mat*_*lia 9

可能他们使用了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,但这只是我的意见)