为什么在c++中不能捕获异常?

dly7yett  于 2022-12-30  发布在  其他
关注(0)|答案(2)|浏览(211)

我珍贵的朋友
为什么c++在这个例子中不能捕捉异常?你能解释一下吗?我试了很多次但是还是不行.如果我在cmd中输入一个字符,catch块就不能工作.

try {
    int dX = 0;
    cin >> dX;
    dX = static_cast<double>(10 / dX);
    cout << dX << endl;
}
catch (conts std::exception &exp) { // if I input any of chars, it doesn't catch?
    cerr << "Error: " << exp->what() << endl;
}
to94eoyn

to94eoyn1#

你所做的并不抛出异常,因此你可以捕获任何东西。一个错误(可能是一个低级异常被抛出),但它不是你可以用处理程序管理的。
其他时候,像这样捕获异常:

try
{
}
catch (const std::exception& error)
{
// handler
}
qxgroojn

qxgroojn2#

你们的代码都不会抛出异常。
这就是为什么它没有被抓住(因为没有一个)。
通常,您需要检查读操作的状态,以确保它显式地工作。

int dX = 0;
if (cin >> dX) {
    // Read worked.
    dX = static_cast<double>(10 / dX);
    cout << dX << endl;
}
else {
    // Read failed.
    cerr << "Error: Read of number failed\n";
}

以上是正常的处理方法。
但是您可以使流引发异常。

// cin will throw on a read failure.
cin.exception(std::ios::fail);
try {
    int dX = 0;
    cin >> dX;                        // now this will throw if the input is not numeric.
    dX = static_cast<double>(10 / dX);
    cout << dX << "\n";
}
catch (std::exception const& exp) {
    cerr << "Error: " << exp.what() << "\n";
}

相关问题