草庐IT

bad_cast

全部标签

c++ - dynamic_cast 是如何工作的?

如果您有以下情况:classAnimal{};classBird:publicAnimal{};classDog:publicAnimal{};classPenguin:publicBird{};classPoodle:publicDog{};dynamic_cast是否只检查一个类是否是另一个类的派生类,或者一个类是否是另一个类的基类?所以如果我有:Bird*bird;Animal*animal;bird=dynamic_cast(bird);animal=dynamic_cast(animal);bird现在将指向一个Animal类,这样我就可以使用bird->some_funct

c++ - dynamic_cast 是如何工作的?

如果您有以下情况:classAnimal{};classBird:publicAnimal{};classDog:publicAnimal{};classPenguin:publicBird{};classPoodle:publicDog{};dynamic_cast是否只检查一个类是否是另一个类的派生类,或者一个类是否是另一个类的基类?所以如果我有:Bird*bird;Animal*animal;bird=dynamic_cast(bird);animal=dynamic_cast(animal);bird现在将指向一个Animal类,这样我就可以使用bird->some_funct

c++ - 为什么 std::exception 在 std::bad_alloc 之前捕获我的异常?

问题:我同时使用std::exception和std::bad_alloc来捕获异常。我正在使用的trycatch的顺序有问题。我附上了示例代码以供引用。预期:如果我的错误是bad_alloc,则抛出bad_alloc异常。观察到:我的错误是bad_alloc,但抛出了异常。示例代码:#include"stdafx.h"#include#includeusingnamespacestd;voidgoesWrong(){boolerror1Detected=true;boolerror2Detected=false;if(error1Detected){throwbad_alloc();

c++ - 为什么 std::exception 在 std::bad_alloc 之前捕获我的异常?

问题:我同时使用std::exception和std::bad_alloc来捕获异常。我正在使用的trycatch的顺序有问题。我附上了示例代码以供引用。预期:如果我的错误是bad_alloc,则抛出bad_alloc异常。观察到:我的错误是bad_alloc,但抛出了异常。示例代码:#include"stdafx.h"#include#includeusingnamespacestd;voidgoesWrong(){boolerror1Detected=true;boolerror2Detected=false;if(error1Detected){throwbad_alloc();

c++ - std::vector 构造函数中的 bad_alloc

std::vector有一个构造函数,其中传递size_typecount的单个参数应该使用count默认构造的元素来调整vector的大小。但以下代码在错误转换后失败并出现bad_alloc异常:#includestructInner{intfoo;charbuf[256];};templatestructOuter{typedefstd::vectorBufContainer;typedeftypenameBufContainer::size_typeBufIndex;BufContainerbufs1;BufContainerbufs2;constBufIndexBUFCOUNT

c++ - std::vector 构造函数中的 bad_alloc

std::vector有一个构造函数,其中传递size_typecount的单个参数应该使用count默认构造的元素来调整vector的大小。但以下代码在错误转换后失败并出现bad_alloc异常:#includestructInner{intfoo;charbuf[256];};templatestructOuter{typedefstd::vectorBufContainer;typedeftypenameBufContainer::size_typeBufIndex;BufContainerbufs1;BufContainerbufs2;constBufIndexBUFCOUNT

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

ScottMeyer在他的书EffectiveC++中说dynamic_cast用于执行向下或跨继承层次结构的安全转换。也就是说,您使用dynamic_cast将基类对象的指针或引用转换为派生或同级基类对象的指针或引用,这样您就可以确定转换是否成功。失败的转换由空指针(转换指针时)或异常(转换引用时)指示。我想得到两个代码片段,在可以指示转换指针和转换引用的情况下显示失败的转换。 最佳答案 对于指针,这是一个简单的空检查:A*a=newA();B*b=dynamic_cast(a);if(b==NULL){//Castfailed}

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

ScottMeyer在他的书EffectiveC++中说dynamic_cast用于执行向下或跨继承层次结构的安全转换。也就是说,您使用dynamic_cast将基类对象的指针或引用转换为派生或同级基类对象的指针或引用,这样您就可以确定转换是否成功。失败的转换由空指针(转换指针时)或异常(转换引用时)指示。我想得到两个代码片段,在可以指示转换指针和转换引用的情况下显示失败的转换。 最佳答案 对于指针,这是一个简单的空检查:A*a=newA();B*b=dynamic_cast(a);if(b==NULL){//Castfailed}

C++ 使用 "this"对象的 static_cast 和 const_cast 添加 const-ness 之间的区别?

按照ScottMeyers的说法,为防止在getter的const版本和getter的非常量版本中重复代码,请从非常量版本调用方法的const版本:static_cast(*this).Methodology();然而,由于过度使用VisualAssistXIntellisense导致意外使用,我输入了:const_cast(*this).Methodology();而且效果很好。在这种情况下,使用特定类型转换有什么不同?使用的IDE:VisualStudio2010。 最佳答案 假设this的类型是A*,没有区别。通常const_

C++ 使用 "this"对象的 static_cast 和 const_cast 添加 const-ness 之间的区别?

按照ScottMeyers的说法,为防止在getter的const版本和getter的非常量版本中重复代码,请从非常量版本调用方法的const版本:static_cast(*this).Methodology();然而,由于过度使用VisualAssistXIntellisense导致意外使用,我输入了:const_cast(*this).Methodology();而且效果很好。在这种情况下,使用特定类型转换有什么不同?使用的IDE:VisualStudio2010。 最佳答案 假设this的类型是A*,没有区别。通常const_