C++ 为什么固定宽度整数打印字符而不是整数?

C++ 为什么固定宽度整数打印字符而不是整数?,c++,integer,fixed-width,C++,Integer,Fixed Width,给定以下代码 #include <cstdint> #include <iostream> #include <limits> int main() { int8_t x = 5; std::cout << x << '\n'; int y = 5; std::cout << y; std::cin.clear(); std::cin.ignore(std::numeri

给定以下代码

#include <cstdint>
#include <iostream>
#include <limits>

int main()
{
    int8_t x = 5;
    std::cout << x << '\n';

    int y = 5;
    std::cout << y;

    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cin.get();

    return 0;
}
#包括
#包括
#包括
int main()
{
int8_t x=5;

std::cout嗯,它们是整数,可以用它们做8位整数运算

但是显然,在您的系统上,
int8\u t
被实现为
typedef
signed char
。这是完全合法的,因为
signed char
s也是整数,但由于
操作符的(可选)属性,因此会产生意外的结果固定宽度类型
intN\u t
,以及其他各种类型,如
uint\u fast16\u t
uintmax\u t
intptr\u t
,都是内置整数类型之一的别名。您不知道它们的别名是什么实际类型,只是它们必须满足文档中的约束

在“正好8位”的情况下,约束并没有留下太多的空间,唯一可以有8位宽的整数类型是
char
类型(回想一下,有三种类型)。因此
int8\u t
,如果它存在,必须是
char
signed char
的别名


最近,iostreams为
操作符
std::is_same::value
定义了重载,谢谢你的回答。这是他们用
int8_t
做的一件棘手的事情。我希望不透明的typedef存在…:(它们真的是“内置”的别名吗整型?@MSalters:是的。相关的措辞在C标准中,从中导入此库组件。术语“带符号整型”是一个艺术术语,在“语言/概念/类型”中定义@ KeRek SB,我从来没有听说过用+X把字符变成一个整数,我认为它只是一个冗余的一元运算符,它明确地表示一个值是正的。@流浪者白痴:C++类型的系统是非常复杂的。不要轻视:S@WanderingIdiot算术运算符都推广了任何整型narro在操作前,功率小于
int
int