促销和扩大同样的事情?

时间:2015-01-28 05:56:48

标签: c++ types casting

促销和扩大之间是否存在差异,我听说扩大仅描述整体促销。

2 个答案:

答案 0 :(得分:2)

拓宽"通常"指整数/浮点类型(如char转到longfloatdouble),但它也可以指字符扩展(如同去从char类型到wchar_t类型。)

扩展转化也称为"促销"缩小转换率称为“强制性”#34;

"促销的概念"并且"强制"也可以在OO中使用(多态);如将基类提升为派生类型,或将派生类型强制转换为基类。因为它仍然是一个"扩大"和"缩小"因为用于基地的地址空间是"较少"而不是衍生类型(因此,当你"向上推广"或者缩小/强制你的类型时,你正在扩大/推广你的类型"向下投射")。

所以直接回答:Is there's a difference between promotion and widening ..不是真的(除非你感到迂腐),虽然我可能不会说'#34;扩大那个班级类型" over"推广该类型"如果我在谈论非积分(只是为了避免任何可能的初始混淆)。

答案 1 :(得分:0)

这实际上取决于背景,因为术语"扩大"是一个非正式的术语,其含义会有所不同,具体取决于讲述故事的人。我将描述一些常见的解释(但不是唯一的解释)。

在此之前,有必要描述促销活动。 C ++标准描述了整体促销(在整数类型之间)和浮点促销(在浮点类型之间)。整数类型和浮点类型之间的转换不会被描述为促销。

常见的特征是促销通常是值保留的(除了使用模运算的有符号整数类型的有符号整数类型),但不需要涉及增加变量的大小(或它可以表示的值的范围)。例如,short可以被提升为int,但short和int也可以是相同的大小(虽然这是依赖于实现/编译器的)。

C ++标准没有使用术语"扩展"完全(除了在库中的某些上下文中,与类型转换无关)。在积分和浮点转换的上下文中,一个常见的非正式含义是一种保留,即保留值和更大的类型。该实现通常将结果中的附加位设置为零(即,使值更宽而不摆弄表示它的位)。所以签名char为short,short to long,unsigned char为unsigned short是扩大转换(假设没有类型的大小相同)。类似地,float to double是一个加宽转换(标准保证float可以表示的值是double可以表示的值的严格子集)。从int到double的转换不是加宽(例如,不一定是保留值,可能会使比特变得笨拙)。

扩展有时也用于描述将指向派生类的指针转换为指向基类(或类似引用之间)的指针。反过来称为"缩小"并且 - 在C ++中 - 只能通过显式类型转换强制使用。