模板参数中的相同长度的同一签名整数类型

时间:2016-05-10 01:42:41

标签: c++ language-lawyer

当用作模板参数时,是相同长度的相同整数类型,并且认为相同的符号相同,即它们在用作模板参数时是否产生相同的模板类?规范的哪一段处理这种情况?

例如,考虑一下unsignedunsigned long都是32位的架构,然后将vector<unsigned>作为另一个类vector<unsigned long>或者他们会被视为同一类型?

2 个答案:

答案 0 :(得分:2)

unsigned intunsigned long类型保证为不同类型。标准中的注释澄清了这一点:

  

即使实现定义了两个或更多基本类型以具有相同的值表示,   然而,它们的类型不同。

([basic.fundamental] / 11)

一般情况下,如果一个别名为另一个( typedefusing),或两者都别名相同,则两种类型相同类型。

鉴于unsigned intunsigned long是不同的类型,vector<unsigned int>vector<unsigned long>也是不同的类型,即使这两个类具有相同的布局。

答案 1 :(得分:0)

如果你在不同的整数类型之间进行盲目类型转换,那么转换有时会起作用,但每次都必须有效。这是因为不同类型具有不同的最小值和最大值。大多数编译器都允许使用类型转换,但它们将使用您可能不熟悉的规则,从而导致潜在的意外行为。最好的办法是研究这些类型,然后确保您编写的任何代码在它们之间进行转换,以防止出现不可预测的结果。