当用作模板参数时,是相同长度的相同整数类型,并且认为相同的符号相同,即它们在用作模板参数时是否产生相同的模板类?规范的哪一段处理这种情况?
例如,考虑一下unsigned
和unsigned long
都是32位的架构,然后将vector<unsigned>
作为另一个类vector<unsigned long>
或者他们会被视为同一类型?
答案 0 :(得分:2)
unsigned int
和unsigned long
类型保证为不同类型。标准中的注释澄清了这一点:
即使实现定义了两个或更多基本类型以具有相同的值表示, 然而,它们的类型不同。
([basic.fundamental] / 11)
一般情况下,如果一个别名为另一个(即 typedef
或using
),或两者都别名相同,则两种类型相同类型。
鉴于unsigned int
和unsigned long
是不同的类型,vector<unsigned int>
和vector<unsigned long>
也是不同的类型,即使这两个类具有相同的布局。
答案 1 :(得分:0)
如果你在不同的整数类型之间进行盲目类型转换,那么转换有时会起作用,但每次都必须有效。这是因为不同类型具有不同的最小值和最大值。大多数编译器都允许使用类型转换,但它们将使用您可能不熟悉的规则,从而导致潜在的意外行为。最好的办法是研究这些类型,然后确保您编写的任何代码在它们之间进行转换,以防止出现不可预测的结果。