下面代码中第2行和第3行有什么区别吗?编译器在每种情况下做什么?
char ch = 'A'; //line 1
int i = ch; //line 2
int j = (int) ch; //iine 3
一般来说,转换和转换(在 C 和 C++ 中)有什么区别?
最佳答案
最终效果没有区别。
cast 是使用显式的、通用的、内置的cast notation 进行转换。
尽管在某些情况下,当我们指的是从 Derived* 到 Base*(或从 Derived& 到 Base&)的隐式转换时,我们会说“向上转换”。
在某些情况下,人们定义了新的转换符号。
术语的上述定义只是一个操作定义,也就是说,它不是一个可以推理出某些东西是强制转换的定义。 Actor 只是那些被定义为 Actor 的 Actor 。 :-) 例如,bool(x)
是一个强制转换,而 !!x
的作用相同,也是显式表示法,不是强制转换。
在 C++ 中,您可以并且最好应该使用命名转换 static_cast
、const_cast
、dynamic_cast
和 reinterpret_cast
,算术内置类型的显式转换可能异常(exception)。一个原因是 C 风格的转换 (Other*)p
,或者在 C++ 特定的符号 OtherPtr( p )
中,可以根据上下文做不同的事情,特别是,当代码稍微改变时,C 风格转换的含义可能会改变。另一个原因是很难搜索 C 样式转换。
也就是说,最好的办法是尽可能避免转换。
干杯,
关于c++ - C 和 C++ : Difference between Casting and Conversion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4344402/