强制和强制有什么区别?

我已经看到这两个术语在各种在线解释中几乎可以互换使用,并且我所咨询的大多数教科书也不完全清楚这些区别。

是否有解释你们所知道的差异的明确而简单的方法?

类型转换 (有时也被称为类型转换

在期望另一个上下文的情况下使用一种类型的值。

非转换类型转换 (有时称为类型双关语

一个不会改变基础位的改变。

强迫

当周围环境需要第二种类型时,编译器自动将一种类型的值转换为另一种类型的值的过程。


类型转换:

转换指的是隐式或显式地将一个数据类型的值更改为另一个数据类型,例如16位整数到32位整数。

强制词用于表示隐式转换。

单词cast通常指明确的类型转换(而不是隐式转换),而不管这是重新解释位模式还是实际转换。

因此,强制是隐含的,强制是明确的,转换是其中任何一个。


几个例子(来自同一个来源):

胁迫(隐含):

double  d;
int     i;
if (d > i)      d = i;

Cast(显式):

double da = 3.3;
double db = 3.3;
double dc = 3.4;
int result = (int)da + (int)db + (int)dc; //result == 9

正如你所注意到的,用法各不相同。

我个人的用法是:

  • “演员”是演员操作的用法。 转换运算符指示编译器:(1)此表达式不是已知的给定类型,但我向您保证,该值在运行时将是该类型的; 编译器会将表达式视为给定类型的表达式,如果不是,则运行时会产生错误,或者(2)表达式完全是不同的类型,但有一种众所周知的方式来关联实例表达式的类型与转换类型的实例。 指示编译器生成执行转换的代码。 细心的读者会注意到这些是对立面,我认为这是一个巧妙的把戏。

  • “转换”是一种操作,通过该操作,一种类型的值被视为另一种类型的值 - 通常是不同的类型,尽管“身份转换”在技术上仍然是转换。 转换可能是“表示改变”,如int加倍,或者它可能是“表示保留”,如字符串到对象。 转换可能是“隐含的”,不需要转换,或者“显式”转换,这需要转换。

  • “强制”是一种表示变化的隐式转换。


  • Casting是将对象类型视为另一种类型的过程,Coercing将一个对象转换为另一个对象。

    请注意,在前一个过程中没有涉及任何转换,您有一种您希望看作另一个的类型,例如,您有3个不同的从基本类型继承的对象,并且您有一个方法基类型,在任何时候,如果你现在是特定的子类型,你可以将其转换成它是什么样的,并使用该对象的所有特定方法和属性,并且不会创建该对象的新实例。

    另一方面,胁迫意味着在新类型的记忆中创建一个新对象,然后原始类型将被复制到新对象中,并将两个对象留在内存中(直到垃圾收集器带走或两者都有) 。

    链接地址: http://www.djcxy.com/p/425.html

    上一篇: What is the difference between casting and coercing?

    下一篇: How can I add new array elements at the beginning of an array in JavaScript?