C++ 类型转换 : benefit of using explicit casts?

标签 c++ casting

在 C++ 中使用这些运算符而不是隐式转换有什么好处?

dynamic_cast <new_type> (expression)
reinterpret_cast <new_type> (expression)
static_cast <new_type> (expression) 

为什么、在哪里、在什么情况下我们应该使用它们?在 OOP 中很少使用它们是真的吗?

最佳答案

从您提供的转换列表中,唯一可以用来替代隐式转换的是 static_cast。

dynamic_cast 用于将父类(super class)向下转换为其子类。这不可能隐式发生,实际上在 OOP 中并不罕见。 static_cast 也可以用在这样的转换中,但是它更危险,因为它不会在运行时检查向下转换是否有效。

最后一个转换,reinterpret_cast,应该非常小心地使用,因为它是所有转换中最危险的。你基本上可以用它把任何东西转换成任何东西——但作为程序员,你必须确保这种转换在语义上是有意义的,因为你实际上通过这种转换关闭了类型检查。

关于C++ 类型转换 : benefit of using explicit casts?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3107924/

相关文章:

C++地址之间的区别

c# - bool 转换问题的枚举

c# - 无法将一种匿名类型转换为另一种

c - 当将指针强制转换为指向包含 union 的结构时

c++ - 如何从基类中暴露隐藏的重载?

c++ - 为什么 close() 只适用于一种方法而不适用于另一种方法?

java - InvokeExact 对象,其类型由类加载器动态加载

c++ - 在 C++ 的函数调用中完成强制转换是否真的有效?

c# - Mimick C++在C#中使用 union 嵌套结构

c++ - 如何将第二个消费者添加到基于 pthread 的生产者-消费者设置中?