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
。