2

私はpplによって起動されたエラーをキャッチするためにこのコードを書きました

    try
    {
        parallel_for (m_row_start, m_row_end + 1, [&functionEvaluation,varModel_,this](int i)
        {
             // do things
        });
    }
    catch(const std::exception error_)
    {
        QString t(error_.what());
    }



    try
    {
        return functionEvaluation.combine(plus<double>());
    }
    catch(const std::exception error_)
    {
        QString t(error_.what());
    }

例外が発生したのではないかと強く疑っていますが、エラーはキャッチされません(大きなメッセージがtry{}catch(...){}キャッチされるstd::exceptionと、明確なメッセージは表示されません。

pplコードで発生した例外をキャッチするための構文は正しいですか?

4

2 に答える 2

3

例外オブジェクトの不要なコピーを回避するために参照でキャッチできなかった理由はありませんが、構文は正しいです。

 catch(const std::exception & error_)
  1. スローされた例外が実際にから派生していることを確認してくださいstd::exception
  2. PPLは、すべてのスレッドが完了した後にのみ例外の伝播を許可します。まだ実行中のスレッドがあり、例外が表示されないようにすることはできますか?

デバッグの目的で、catchブロックを追加できます。

catch(...)
{
  cout << "Unknown exception" << endl;
}

何らかの例外がスローされているかどうかを確認するだけですが、例外を有効に処理する方法がないため、これを本番コードに残しません。

于 2012-10-02T12:38:07.993 に答える
0

まず、何がスローされるかを確認します。キャッチをタイプミスすると、反応しません。多分それは単にCONSTマーカーですか?const-typeはnon-const-typeと同じではありませんが、キャッチがconst-volatile-sensitiveであるかどうかは、実際にはよく覚えていません。

第二に、強い理由が生じない限り、常に参照によってキャッチします。

catch(std::exception& error)

そうしないと、例外コピーが発生します。http: //www.parashift.com/c++-faq/what-to-catch.htmlコピーとは、オブジェクトのコピーを意味し、再生成ではありません;)

于 2012-10-02T12:38:19.033 に答える