丢弃没有层次结构的bad_cast exc

时间:2013-04-08 10:08:47

标签: c++ exception

是否可以抛出bad_cast异常而不使任何层次结构或新类与C不同? main()无法编辑,唯一可以编辑的是C类。我也不能明确抛出bad_cast。

class C{
    private:
        ...

    public:
        void f(){
        ...
        }
};


int main () {
    C c;
    c.f();

}

提前致谢

2 个答案:

答案 0 :(得分:1)

,你不能。

dynamic_cast仅适用于多态类类型,并且C ++核心语言的内置类型不是多态类类型。

所以只要你不能定义任何新的多态类(也不是#include其他已经存在的多态类的定义),或者不能调用另一个看到那些定义的函数(哪一个应该可能被视为作弊),你无法获得bad_cast例外。

此外,除了dynamic_cast之外,没有引发std::bad_cast异常的核心语言构造。所以你的问题的答案是:

  

是否可以抛出bad_cast异常而不使任何层次结构或新类与C不同?

”。

答案 1 :(得分:0)

  

无法编辑main(),唯一可以编辑的是C类。我也不能明确抛出bad_cast。

鉴于这些约束,定义嵌套在C内的多态类,并尝试将其转换为不相关的内容(例如C本身):

class C{
    private:
        struct X {virtual ~X(){}};

    public:
        void f(){
            X x;
            dynamic_cast<C&>(x);
        }
};

int main () {
    C c;
    c.f();
}

请注意,这可能会给编译器发出警告,因为它足够聪明,可以判断演员阵容永远不会成功。

如果您还包含不能创建任何新类的约束,那么这是不可能的。 bad_cast仅在使用dynamic_cast时由语言本身抛出;只能应用于多态类型,并且没有可用的多态类型。