是否可以抛出bad_cast异常而不使任何层次结构或新类与C不同? main()无法编辑,唯一可以编辑的是C类。我也不能明确抛出bad_cast。
class C{
private:
...
public:
void f(){
...
}
};
int main () {
C c;
c.f();
}
提前致谢
答案 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
时由语言本身抛出;只能应用于多态类型,并且没有可用的多态类型。