当使用CI之类的低级语言进行编码时,发现强制转换有时意味着“重新解释这些字节,就像它一直是其他类型一样”,而在其他时候则是“将值智能地转换为其他类型”。
这个词的原始含义是什么,什么时候期望进行转换以及什么时候期望进行原始重新解释?
cast
计算意义上讲,该术语与从冶金意义上讲的铸造更相似,即浇铸到模具中时熔融金属的形状得以重整:britannica.com/EBchecked/topic/377665/metallurgy/81884/Casting
当使用CI之类的低级语言进行编码时,发现强制转换有时意味着“重新解释这些字节,就像它一直是其他类型一样”,而在其他时候则是“将值智能地转换为其他类型”。
这个词的原始含义是什么,什么时候期望进行转换以及什么时候期望进行原始重新解释?
cast
计算意义上讲,该术语与从冶金意义上讲的铸造更相似,即浇铸到模具中时熔融金属的形状得以重整:britannica.com/EBchecked/topic/377665/metallurgy/81884/Casting
Answers:
用C进行转换是唯一的,与其他语言完全不同。它也永远不会聪明。
使用精心定义的规则,C语言中的转换将值从一种类型转换为另一种类型。如果您真的需要知道,请阅读标准。否则,主要要点是:
有些强制转换是隐式应用的,在某些强制转换中,编译器将发出警告。最好注意警告!
最好忽略cast的字典定义,因为它是无用的。通过转换或强制术语可以更好地描述许多演员,因此也值得一读。
C ++更加复杂,但是您没有这样问,对吗?
T*
之间的转换void*
始终是明确定义的。
Webster词典的这一部分给出了正确的定义:
a:通过将液体或塑料形式倒入模具中并使其在无压力的情况下硬化而使(某种物质)成形
b:通过该方法成型
因此,在投射之前,您的“对象”(实际上不是OOP对象)处于给定的形状(类型)。当您重新铸造时,即在其周围“浇筑混凝土”以使其变为新的形状,这就是铸造的工作方式。您有一个数字,是一个六边形的整数,转换后,您将得到一个矩形的字符串。
将C强制转换分为两组可能会很有用:
数值转换-将一个表示形式之间的数字转换为另一种表示形式,尝试保留该值。例如- (int)3.1
将是3
。有确切的规则定义当无法保留确切值时会发生什么。
指针强制转换-保留内存地址,但更改其取消引用的方式。例如,对于float x=3.5
,*(int *)&x
将给出1080033280
-此整数由表示float的相同位模式表示3.5
。
Keep the memory address, but change the way it's dereferenced.
未定义取消引用类型标记的指针。该标准仅保证从A *
to到B *
back的转换将产生相同的结果A *
,这在第一位置可能无效,或者如果B *
为a char *
,则可以将其用于读取任何类型的对象表示。对于所有其他类型,取消引用B *
指针是类型操作,UB和&违反了严格的别名。无论如何,即使编译器由于这个原因而没有丢弃上面的示例2,您仍在对位模式进行不可移植的假设
cast (v): to receive form in a mold
在C ++中,可以使各种类型的转换更加明确,其reinterpret_cast
含义是“将这些字节当作已经处理过的其他东西一样处理”。在C语言中,您可以通过使用绝对明确,使用运算符进行union
强制转换(type)
将尝试使结果在数值上相等,直到精度下降为止。
int*
一个字和一个两个字的处理器(char*
第二个字节选择一个字的高字节或低字节)是合理的。转换为(int*)
to (char*)
将需要添加一个额外的单词,该单词的值应等于指定。的第一个字节的值int
。