【发布时间】:2013-02-12 10:46:07
【问题描述】:
try
{
throw Derived();
}
catch (Base&)
{
std::cout << "subtyping\n";
}
try
{
throw "lol";
}
catch (std::string)
{
std::cout << "coercion\n";
}
输出:
subtyping
terminate called after throwing an instance of 'char const*'
为什么异常处理对子类型很好,但对强制却不行?
【问题讨论】:
-
当您抛出异常以尝试匹配异常处理程序时,不会创建新对象。
-
因为
Derived()是Base并且可以被Base&绑定,但"coercion"不是std::string。 catch 子句捕获 existing 对象。 -
如果有第二个 catch 块采用
myOwnString类型会发生什么?那岂不是模棱两可? -
@Pubby 好吧,如果有第二个 catch 块占用不同的 Base 怎么办?
-
这个问题仍然没有被接受的答案有什么特别的原因吗?
标签: c++ exception-handling language-design coercion subtyping