c++ - 如何使用 dynamic_cast 运算符识别失败的强制转换?

标签 c++ pointers reference dynamic-cast

Scott Meyer 在他的书Effective C++ 中说dynamic_cast 用于执行向下或跨继承层次结构的安全转换。也就是说,您使用 dynamic_cast 将基类对象的指针或引用转换为派生或同级基类对象的指针或引用,这样您就可以确定转换是否成功。

失败的转换由空指针(转换指针时)或异常(转换引用时)指示。

我想得到两个代码片段,在可以指示转换指针和转换引用的情况下显示失败的转换。

最佳答案

对于指针,这是一个简单的空检查:

A* a = new A();
B* b = dynamic_cast<B*>(a);

if (b == NULL)
{
    // Cast failed
}

对于引用,你可以捕获:

try {
    SomeType &item = dynamic_cast<SomeType&>(obj);
}
catch(const std::bad_cast& e) {
    // Cast failed
}

关于c++ - 如何使用 dynamic_cast 运算符识别失败的强制转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11510128/

相关文章:

c - 字符串与 C 中的 char 指针数组有何不同?

c# - 哪个更好,返回值或输出参数?

c++ - vector::引用

c++ - boost::thread join 函数 block 调用线程

c++ - Visual Studio 2013 中右值引用的初始化捕获

c++ - 从 clojure 调用 C++

c++ - 绑定(bind)到新初始化器中的引用的临时对象的生命周期是多少?

c++ - 如何在 C++ 中读取复杂的文本文件?

c - 给另一种类型变量的指针赋值

c - 如何将 .txt 文件的内容打印为字符串?