- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我仍然想知道为什么下面给出了 std::bad_cast
异常
#include <typeinfo>
class A {virtual void fun() {}};
class B : public A {};
int main() {
try {
A a;
B b = dynamic_cast<B&>(a);
} catch (std::bad_cast& e) {
std::cerr << e.what() << '\n';
}
}
class A
是一个多态类B
类公开派生自 A
通过引用从基类 A
对象正确地进行向下转换,dynamic_cast
确实接受引用参数但为什么还是这个异常(exception)?
最佳答案
这就是dynamic_cast应该做的。 a
实际上是A
的对象,将其转换为派生类B
会失败。另一方面,如果您将某些具有引用类型或指向基类的指针转换为基类,但实际上引用了 B
的对象,那么它将正常工作。例如
B b1;
A& ra = b1;
B b2 = dynamic_cast<B&>(ra);
关于c++ - 通过引用派生类对象从基类对象向下转换时抛出 bad_cast 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43305271/
我在 Linux 上使用带有 clang++ 的 cmake。我遇到了一些链接器问题: Linking CXX executable "/run/media/toi/Storage E/Dropbox
万一dynamic_cast失败 bad_cast抛出异常。在我的代码中有一个单独的异常层次结构和 bad_cast不在该层次结构中,因此我的代码无法处理 bad_cast .我可以抛出一些其他异常吗
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
我正在尝试一个虚拟模板函数实现。我在将 this 指针转换为指向子类模板的指针时可以正常工作,但是当我将 *this 转换为对子类的引用时我无法正常工作,为什么? template struct B
我仍然想知道为什么下面给出了 std::bad_cast 异常 #include class A {virtual void fun() {}}; class B : public A {}; in
dynamic_cast 抛出 bad_cast 异常,如果你转换一个引用,但据我所知,标准指针被视为引用,即指针是一种引用类型。 那么我应该在投指针时得到 bad_cast 吗? 这个问题来自 th
这个问题在这里已经有了答案: What is object slicing? (18 个答案) 关闭 7 年前。 我正在尝试了解 dynamic_cast 的工作原理。我有一个类 interface
我在为 dynamic_cast 使用异常处理时遇到了一些问题。它不会总是返回 bad_cast。 尽管 d1 返回 nullptr 并且编译器向我显示警告,但下面的语句没有向我抛出 bad_cast
class GAGenome { virtual void method(){}; }; template class GAArray { }; template class GA1DArra
是否可以抛出 std::bad_cast 的实例?根本的问题不是这样做好不好,而是关于 std::bad_cast 是否有默认构造函数。 谢谢 最佳答案 C++ 标准的 18.5.2 说"is",它有
为什么当失败时返回std::bad_cast时需要Null? 我了解到dynamic_cast失败时,它会返回Null,因此我可以检查Null是否已返回,这意味着发生了错误。 但是,为什么std::b
为什么下面的代码会产生std::bad_cast异常? #include #include #include int main() { std::basic_string reg = U
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
在下面的代码中,在将 derived.properties_ 从 BaseProperties 转换为 DerivedProperties 时,我得到了一个 std::bad_cast 异常抛出。查看
我有一个基类和一个派生类,如果 base 是基类的对象,我有一行会给我错误 std::bad_cast 。为什么它给我那个错误?并尝试我看到 static_cast 有效,但我不知道为什么。 行是:
关于 std::bad_cast 异常,我注意到引用和指针的行为方式似乎不同。例如: class A { public: ~A() {} }; class B : public A {}; //Cas
我正在尝试使用以下代码从文件中读取数据。 (请注意,您需要在 GCC 上启用 C++11 功能才能进行此编译。) #include typedef unsigned char byte; int m
我正在尝试开始使用 Boost for C++。这是一个用 g++ -Wall test.cpp/usr/local/Cellar/boost/1.55.0/lib/libboost_locale
我正在尝试使用 ANTLR4 解析表达式。因此,我正在使用访问者模式并创建一个抽象语法树。 结果可以是一个表达式或其他东西(我从这个示例代码中删除了)。访问者期望返回类型 antlrcpp::Any所
为简单起见, class Parent {} class Child1 : Parent {} class Child2 : Parent {} 在其他地方,我创建了 Child1 和 Child2
我是一名优秀的程序员,十分优秀!