是否保证size_t,vector :: size_type等typedef不会绑定到char类型?

gaa*_*kam 3 c++ size-t char

cstdinttypedef 肯定可以绑定到char变量.例如,它很可能uint_least8_t与之结合unsigned charint_least8_t结合signed char.

标准是否保证类似的东西不会发生size_t或类似的类型?或者至少有一个纯理论上的机会,这些类型将绑定到某些字符类型,unsigned char甚至可能wchar_t

Bau*_*gen 5

我们所知道的std::size_t是:

类型size_t是一个实现定义的无符号整数类型,它足够大,可以包含任何对象的字节大小.

如果unsigned char满足这个条件,它可以用作std::size_t.

然而,这种关注纯粹是理论上的,因为没有一个真正的平台(我知道)哪里unsigned char足够宽(好吧,这是错误的)使用char类型std::size_t等.

如果你是超级偏执狂,你可以至少int用一元来提升价值+:

std::cout << +vector.size();
Run Code Online (Sandbox Code Playgroud)

即使尺寸类型是字符类型,也会打印该数字.

对于读取,您可以使用类型的变量std::common_type<unsigned int, std::size_t>::type(可能通过a typedef),然后进行边界检查以防万一sizeof(int) > sizeof(std::size_t).

  • 我不确定你的最后一段是完全正确的.DSP(数字信号处理器)有C实现,`CHAR_BIT> 8`; 特别是,我认为`CHAR_BIT == 32`存在.尽管如此,在这样的系统中,`unsigned int`可能也是32位,并且是`size_t`的更好的候选者,所以仍然没有充分理由将`size_t`作为字符类型. (2认同)