推广和扩大是有区别的,我听说加宽只描述整体晋升。
发布于 2015-01-28 06:36:31
拓宽“一般”指的是整数/浮点类型(如char到long或float到double),但也可以引用字符拓宽(从char类型到wchar_t类型)。
扩大的转换也被称为“提升”,缩小转换称为“强制”。
“促进”和“胁迫”的概念也可用于OO (多态);例如将基类提升为派生类型,或将派生类型强制为基本类型。这是因为它仍然是“加宽”和“缩小”,因为用于基的地址空间“小于”派生类型(因此,当“向上转换”时,您正在扩大/提升类型,或者在“向下转换”时缩小/胁迫您的类型)。
所以直接回答:Is there's a difference between promotion and widening ..。不,不是真的(除非你觉得有点迂腐),但如果我说的是非积分(只是为了避免任何可能的初始混淆),我可能不会说“扩大那个类类型”而不是“推广那个类类型”。
发布于 2015-01-28 09:39:42
这真的取决于背景,因为“拓宽”一词是一个非正式的术语,其含义因讲故事的人而略有不同。我将描述一些常见的解释(但不是唯一的解释)。
在此之前,有必要描述一下什么是晋升。C++标准描述了积分提升(积分类型之间)和浮点提升(浮点类型之间)。积分类型和浮点类型之间的转换不被描述为升级。
其共同的特点是升迁通常是价值保持(除了从有符号到无符号积分类型,它使用模算法),但不需要增加变量的大小(或它可以表示的值的范围)。例如,可以将空提升为int,但短和int也可能具有相同的大小(尽管这取决于实现/编译器)。
C++标准根本没有使用“拓宽”这个术语(除了在库中的某些上下文中,与类型转换无关)。在积分和浮点转换的背景下,一种常见的非正式含义是一种既能保持价值又能起到更大作用的推广。实现通常将结果中的附加位设置为零(即使值变宽而不篡改表示它的比特)。因此,符号字符到短字符,短字符到长字符,无符号字符到无符号短字符正在扩大转换(假设所有类型都不是相同大小的)。类似地,float to double是一种扩大的转换(浮动可以表示的值的标准保证是double可以表示的值的严格子集)。从int到double的转换不是一种扩大(例如,不一定保持值,比特可能被篡改)。
拓宽有时也用于描述将指针转换为指向基类的指针(或类似引用之间的指针)。相反称为“收缩”和- in C++ -只能通过显式类型转换强制执行。
https://stackoverflow.com/questions/28185617
复制相似问题