C和C++:转换和转换之间的区别

Naw*_*waz 8 c c++ casting

以下代码中第2行和第3行之间有什么区别吗?编译器在每种情况下做什么?

char ch = 'A';     //line 1
int  i = ch;       //line 2
int  j = (int) ch; //iine 3
Run Code Online (Sandbox Code Playgroud)

一般来说,Casting和Conversion之间有什么区别(在C和C++中)?

Che*_*Alf 5

最终效果没有区别。

是使用显式的,一般情况下,内置的转换符号转换。

尽管在某些情况下,当我们指的是从 Derived* 到 Base*(或从 Derived& 到 Base&)的隐式转换时,我们会说“向上转换”。

在某些情况下,人们定义了新的强制转换符号。

上面的术语定义只是一个操作定义,也就是说,它不是一个可以推理出某些东西是演员表的定义。演员表只是那些被定义为演员表的人。:-) 例如,bool(x)是强制转换,而!!x执行相同操作并且也是显式表示法的while不是强制转换。

在 C++ 中,您可以并且最好应该使用命名的 casts static_castconst_castdynamic_castreinterpret_cast,但对于算术内置类型的显式转换可能例外。一个原因是 C 风格的强制转换(Other*)p,或在 C++ 特定的表示法中OtherPtr( p ),可以根据上下文做不同的事情,特别是当代码稍微改变时,C 风格强制转换的含义可能会改变。另一个原因是很难搜索 C 风格的类型转换。

也就是说,最好是尽可能避免强制转换。

干杯 & hth.,