c ++中扩大和缩小之间的区别?

时间:2010-10-01 17:58:10

标签: c++ oop

c ++中扩展缩小有什么区别? 什么是铸造和什么类型的铸造?

3 个答案:

答案 0 :(得分:6)

这是一般的铸造,而不是C ++特定的。

“拓宽”强制转换是从一种类型到另一种类型的强制转换,其中“目标”类型具有比“源”更大的范围或精度(例如,int为long,float为double)。 “缩小”演员阵容正好相反(长到整数)。缩小的演员会引发溢出的可能性。

内置基元之间的扩展转换是隐式的,这意味着您不必使用转换运算符指定新类型,除非您希望在计算期间将类型视为更宽的类型。默认情况下,类型被转换为在二进制表达式或赋值的变量一侧使用的最宽实际类型,而不计算另一方的任何类型。)

另一方面,缩小强制转换必须显式转换,除非代码被标记为未检查溢出(C#中的关键字为unchecked;我不知道这是该语言独有的)

答案 1 :(得分:4)

加宽转换是当你从一个整数变为一个整数时,你正在提高演员的精确度。

当你从double变为整数时,

缩小转换是相反的。你正在失去精确度

有两种类型的强制转换,隐式和显式转换。以下页面将非常有用。此外,整个网站几乎都是c / c ++需求的转向。

Tutorial on casting and conversion

答案 2 :(得分:1)

带回家考试? : - )

让我们先进行铸造。 C或C ++中的每个对象都有一个类型,它只不过是给出两种信息的名称:事物占用多少内存,以及你可以对它做什么操作。

所以

 int i;

只是意味着i指的是内存中的某个位置,通常是32位宽,您可以在+,-,*,/,%,++,--和其他位置执行此操作。

Ci并不是真的很挑剔,但是:

 int * ip;

定义另一种类型,称为指向整数的指针,它表示内存中的地址。它有一个额外的opertion,前缀 - *。在许多机器上,恰好是32位宽。

强制转换类型转换告诉编译器将标识为一种类型的内存视为另一种类型。类型转换被编写为(typename)

所以

 (int*) i;

表示“将i视为指针,然后

 (int) ip;

表示将指针ip视为整数。

现在,在这种情况下,加宽缩小意味着从一种类型转换为另一种类型,分别具有更多或更少的位。