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

时间:2015-10-02 20:34:21

标签: c++ char size-t

cstdint typedef绝对有可能绑定到char变量。例如,uint_least8_t很可能与unsigned char绑定,而int_least8_t绑定到signed char

标准是否保证size_t或类似类型不会发生类似事情?或者至少有一种纯理论上的机会,即这些类型会绑定到某些字符类型,例如unsigned char或甚至wchar_t

2 个答案:

答案 0 :(得分:5)

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

  

type size_t是一个实现定义的无符号整数类型,其大小足以包含大小   以字节为单位的任何对象。

如果unsigned char符合此条件,则可以将其用作std::size_t

然而,这种关注纯粹是理论上的,因为没有一个真正的平台(我知道) unsigned char足够宽(好吧,那是错的)一个字符type用作std::size_t等。

如果你是超级偏执者,你可以使用一元int将价值提升至至少+

std::cout << +vector.size();

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

对于阅读,您可以使用std::common_type<unsigned int, std::size_t>::type类型的变量(可能通过typedef),然后在sizeof(int) > sizeof(std::size_t)的情况下进行边界检查。

答案 1 :(得分:0)

文档N3337是最接近C ++ 11的近似值,可以在线免费获取。相关章节是3.9.1 [basic.fundamental],18.2 [support.types]和18.4 [cstdint]。

除了wchar_t之外,您感兴趣的所有类型名称都必须是typedef s,才能获得相应签名的原始整数类型signed charunsigned char被认为是原始整数类型;普通char不是。 wchar_t很特别;在C ++(而不是C)中,它是关键字(如int)和不同的原始类型。

普通charsigned charunsigned char被视为字符类型; wchar_tchar16_tchar32_t字符类型(也不是整数类型)。

所以答案是你提到的所有类型,除了wchar_t可以可以被定义为signed charunsigned char,但不是那么简单char

是的,这很令人困惑。它反映了与C的不同级别兼容性的纠结历史,以及关于如何处理无法用ASCII表示的文本的不断变化的想法。