以下代码中第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++中)?
最终效果没有区别。
一投是使用显式的,一般情况下,内置的转换符号转换。
尽管在某些情况下,当我们指的是从 Derived* 到 Base*(或从 Derived& 到 Base&)的隐式转换时,我们会说“向上转换”。
在某些情况下,人们定义了新的强制转换符号。
上面的术语定义只是一个操作定义,也就是说,它不是一个可以推理出某些东西是演员表的定义。演员表只是那些被定义为演员表的人。:-) 例如,bool(x)是强制转换,而!!x执行相同操作并且也是显式表示法的while不是强制转换。
在 C++ 中,您可以并且最好应该使用命名的 casts static_cast、const_cast、dynamic_cast和reinterpret_cast,但对于算术内置类型的显式转换可能例外。一个原因是 C 风格的强制转换(Other*)p,或在 C++ 特定的表示法中OtherPtr( p ),可以根据上下文做不同的事情,特别是当代码稍微改变时,C 风格强制转换的含义可能会改变。另一个原因是很难搜索 C 风格的类型转换。
也就是说,最好是尽可能避免强制转换。
干杯 & hth.,