c++ - C 和 C++ : Difference between Casting and Conversion

标签 c++ c casting

下面代码中第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_castconst_castdynamic_castreinterpret_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/

相关文章:

c - 在C中写入文件多线程

c - 将指针转换为 int 以从 C 中的 int 函数返回是否安全?

c# - 如何在 C# 中将 ImmutableArray<DerivedClass> 转换为 ImmutableArray<BaseClass> ,反之亦然?

C++ sfml 在窗口打开后立即接收关闭事件

与另外两个进程的通信进程

c++ - C++ 可以在全局范围内拥有代码吗?

c - 编译时的offsetof

java - 如何将java对象转换为Object[]?

c++ - 如何反转整数参数包?

javaout 类型映射不适用于 std::vector