dynamic-cast相关内容

使用 dynamic_cast 而不是传统的多态性有什么好处?

我们可以使用多态性(继承 + 虚函数)将不同的类型泛化到一个共同的基类型下,然后将不同的对象当作相同的类型来引用. 使用 dynamic_cast 似乎是完全相反的方法,因为本质上我们在决定我们要采取什么行动之前检查对象的特定类型. 有没有已知的例子说明不能像使用 dynamic_cast 那样容易地用传统的多态来实现? 解决方案 当你发现自己想要在基类中使用像“IsConcr ..
发布时间:2022-01-24 16:23:52 C/C++开发

使用 dynamic_cast 强制转换 const 类

我想投这个: 类基础{上市:虚拟 ~Base(){};};类 Der:公共基础 {};主函数(){const Base* base = new Der;Der* der = dynamic_cast(base);//错误返回0;} 我该怎么办?我试图输入: const Der* der = dynamic_cast(base); 来维护 const 但这不起作用. 解决方案 试试这个: ..
发布时间:2022-01-23 23:58:36 C/C++开发

动态转换抛出指针不是 std::__non_rtti_object

我遇到了 dynamic_cast 的问题.我刚刚编译了我的项目并在调试模式下测试了所有东西,然后我尝试在发布模式下编译它,我已经从调试模式 exept 优化参数复制了每个配置,现在是/o2,(在调试时我将它设置为/od)项目已编译,但当它开始加载我的资源时,我在此处的代码段中遇到异常: for(int j = 1; j second->getParametersNumber();j+ ..
发布时间:2022-01-21 17:19:27 C/C++开发

如何使用 dynamic_cast 运算符识别失败的转换?

Scott Meyer 在他的 Effective C++ 一书中说 dynamic_cast 用于执行向下或跨继承层次结构的安全转换.也就是说,您使用 dynamic_cast 将指向基类对象的指针或引用转换为指向派生或同级基类对象的指针或引用,这样您就可以确定转换是否成功. 失败的转换由空指针(转换指针时)或异常(转换引用时)指示. 我想得到两个代码片段,显示在转换指针和转换引用的 ..
发布时间:2022-01-05 12:13:26 C/C++开发

什么是动态转换的“好用"示例?

我们经常听到/读到应该避免动态转换.我想知道根据你的说法,什么是它的“好用"示例? 编辑: 是的,我知道其他线程:它是确实在阅读我提出问题的第一个答案时! 解决方案 这个最近的主题给出了一个它可以派上用场的例子.有一个基本的 Shape 类和从它派生的类 Circle 和 Rectangle .在测试相等性时,很明显圆形不能等于矩形,尝试比较它们将是一场灾难.在遍历指向 Sha ..
发布时间:2021-12-31 22:03:20 C/C++开发

使用带有引用和指针的 dynamic_cast 时的行为差异

我正在检查 dynamic_cast 的行为,发现当它失败时,只有当目标是引用类型时才会抛出 std::bad_cast 异常.如果目标是指针类型,则不会从强制转换中抛出异常.这是我的示例代码: A 类{上市:虚拟 ~A(){}};B类:公共A{};int main(){A* p = 新 A;//使用引用尝试{住宿加早餐旅馆b = dynamic_cast(*p);}抓住(标准::坏演员 ..
发布时间:2021-12-31 21:40:14 C/C++开发

C++ 中的 dynamic_cast 和 static_cast

我对 C++ 中的 dynamic_cast 关键字很困惑. struct A {虚空 f() { }};结构 B : 公共 A { };结构 C { };空f(){一个;乙乙;A* ap = &b;B* b1 = dynamic_cast(&a);//NULL,因为'a'不是'B'B* b2 = dynamic_cast(ap);//'b'C* c = dynamic_cast(ap);//空 ..
发布时间:2021-12-31 21:28:40 C/C++开发

“this"的dynamic_cast内部构造函数

这个问题与这个问题非常相似为什么可以't I dynamic_cast “sideways"在多重继承期间?,除了强制转换确实有效 - 只是不在构造函数内部. 标题: A 类{上市:虚拟 ~A() {}无效打印A();};B级{上市:B();虚拟 ~B() {}无效的打印B();私人的:std::string message_;};C类:公共A,公共B{上市:C() {}虚拟 ~C() { ..
发布时间:2021-12-30 15:34:26 C/C++开发

C++ 入门书在使用 `dynamic_cast` 时有什么问题吗?

引自 C++ Primer 5th 19.2.1.dynamic_cast 运算符 dynamic_cast 具有以下形式: dynamic_cast(e)dynamic_cast(e)dynamic_cast 其中 type 必须是一个类类型并且(通常)命名一个具有虚拟的类职能.在第一种情况下,e 必须是一个有效的指针(第 2.3.2 节,第 52 页);第二个,e必须是左值;在第三个 ..
发布时间:2021-11-26 18:57:50 C/C++开发

从编译器设置中关闭 RTTI 有什么好处?

由此(RTTI 有多贵?),似乎很明显动态转换是比静态类型比较昂贵得多,但我想知道在编译器选项(VS2010,/GR-)中关闭 RTTI 选项是否值得 我的代码中没有动态转换(我用静态转换替换了它们).但是 (/GR-) 选项在使用动态转换时除了发出错误之外还有其他作用吗?里面有没有内存或代码优化? 提前致谢. 解决方案 Straight 来自MSDN(强调我的): 当/ ..
发布时间:2021-09-18 19:12:46 C/C++开发

从基类指针 C++ 访问子类成员

我有一组自定义类 Student 对象.CourseStudent 和 ResearchStudent 都继承自 Student,Student 的所有实例都是其中之一. 我有一个函数来遍历数组,确定每个学生的子类型,然后对它们调用特定于子类型的成员函数. 问题是,因为这些函数没有重载,所以在Student中找不到,所以编译器大惊小怪. 如果我有一个指向 Student 的指针, ..

如何正确使用《C++ 核心指南:C.146:在类层次结构导航不可避免的地方使用 dynamic_cast》

动机 C++ 核心指南建议在“无法避免类层次结构导航"时使用 dynamic_cast.这会触发 clang-tidy 抛出以下错误: Do not use static_cast to downcast from a base to aderived class;改用 dynamic_cast [cppcoreguidelines-pro-type-static-cast-downcast ..

不能动态投射侧身

我偶然发现了从派生类到派生类的横向转换,并发现了我的知识空白.我一直生活在一个可以做到这一点的世界 - 直到现在.相反,会抛出 std::bad_cast.这是怎么回事? #include 班级基地{受保护:国际x_;上市:基础(int x):x_(x){}虚拟 ~Base() = 默认值;int x() const { 返回 x_;}虚拟无效 setX(int x) = 0;};class E ..
发布时间:2021-06-18 20:08:11 C/C++开发

dynamic_cast<>有多快?

... 与典型的 std::string::operator==() 相比?我在下面提供了更多细节,我不确定它们是否有任何相关性.具有复杂性或近似性的答案就足够了.谢谢! 详细信息: 我将在列表的 for 循环中使用它来查找某些特定实例.我估计我的平均继承水平为 3.5 个类.我正在寻找的那个有一个父类,一个祖父类和两个“接口"之上,即用几个 virtual void abc() = 0; ..
发布时间:2021-06-15 19:23:40 C/C++开发

《跨界》尝试使用 static_cast 失败;为什么?

为什么“交叉投射"不起作用? 以下创建此对象继承模型: 食物/\芝士蛋糕 这里我尝试将 static_cast 指针从 cheese 指向 cake,制作一个芝士蛋糕 :D.我从 Apple Clang/LLVM 收到以下错误: 错误:不允许从 'Cheese *' 到 'Cake *' 的静态转换,这与继承无关 但他们是通过继承联系起来的:他们是兄弟姐妹. 为什么我不能将 ..
发布时间:2021-06-12 19:25:34 其他开发