构造函数中处理的异常已传播回.怎样
Exception handled in constructor propagated back. How?
我有一个类,它的构造函数将抛出异常。我还有一个catch块来处理那个异常。但是,我仍然看到异常被传播回调用者,即使它被处理了。我知道,应该有一个例外,通知来电者施工失败。但在这种情况下,它(再次投掷)是如何发生的?
class Test
{
public:
Test()
try
{
std::cout << "in child constructor" << std::endl;
throw 3.2;
}
catch(int &e)
{
std::cout << "in int catch: " << e << std::endl;
}
catch (double &e)
{
std::cout << "in double catch: " << e << std::endl;
}
};
int main (void)
{
try
{
Test obj;
}
catch (int &e)
{
std::cout << "in main int catch: " << e << std::endl;
}
catch (double &e)
{
std::cout << "in main double catch: " << e << std::endl;
}
return 0;
}
我得到的输出是
in child constructor
in double catch: 3.2
in main double catch: 3.2
根据标准,这是正确的。n3337.pdf第15.3节第15点内容如下:
如果控件到达构造函数或析构函数的函数try块的处理程序的末尾,则当前处理的异常将被重新抛出。否则,当控制到达函数try块(6.6.3)的处理程序的末尾时,函数返回。从函数try区块的末尾流出相当于没有值的返回;这导致在值返回函数中出现未定义的行为(6.6.3)
可以完全捕获并阻止异常在构造函数/析构函数体内部传播。但是,您不能用这种方式捕获基类/成员构造函数/析构函数抛出的异常。
相关文章:
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- 我怎样才能将所有子目录与 cmake 自动匹配
- 我怎样才能在行尾使用 cout<<"hello world";不使用 ;
- 我怎样才能有 2 个程序并让用户选择他们想要使用的程序?
- cmake 使用 find_package 传播依赖项
- 我怎样才能通过友谊正确地履行我的职能?
- 我怎样才能代替使用新的使用malloc翻译
- 我怎样才能简单地将opencv 包含在我的项目中与CMake
- 我们怎样才能有效地压缩DNA串
- 组合"%"和可选后缀时,自动属性传播有时不起作用
- 跨目标传播库依赖项
- 我怎样才能在不重复的情况下随机迭代向量的每个元素
- 张量流 c++ API 是否支持反向传播的自动微分?
- 我怎样才能接受输入作为双精度值并执行 IF ELSE 语句
- 我怎样才能使这个列表工作
- 我怎样才能从分数中得到分子和分母
- 我怎样才能阻止我的程序输出时间,它使我的程序难以阅读
- 如果我在关闭套接字之前没有发送IP_DROP_MEMBERSHIP会怎样?
- 升级到G++4.8-exception_ptr.h不支持异常传播
- 构造函数中处理的异常已传播回.怎样