奇怪的gcc行为与无符号整数

gyr*_*yro 7 c++ g++ c++11 c++14

#include <iostream>

#include <cstdint>
#include <cstdio>

using namespace std;

int main()
{
    uint16_t ii; 
    std::cin >> ii;                                                    
    printf("%d\n", ii);
}
Run Code Online (Sandbox Code Playgroud)

当我输入5输出时也是5.但是当我改变iito 的类型时uint8_t,我没有得到,553似乎是ASCII值5.这是预期的吗?

Ala*_*kes 11

uint8_t允许(但不是必需)为typedef char(如果它恰好是未签名的)或unsigned char.并且输入的是字符而不是数字.所以这是有效但不是必需的行为.