2016-04-20 10 views
6

私の上司がこの質問に答えましたwhy ... (three points) in catch block is exist?は非常にエレガントに答えました。キャッチ(...)をスローするか値渡しするか参照する

しかし、私が何かを考えさせられた(そして、できれば私の以前の悪い質問を補って)い、(つまり、深いコピーが取られている)、またはによってによって捕捉された例外再スロー

catch(...){ 
    throw; 
} 

を行います参照

+3

_再スローされた例外オブジェクトは元の例外オブジェクトであり、コピーではありません。_ [try、throw and catchステートメント](https://msdn.microsoft.com/en-GB/library/)の注釈から抜粋しました。 6dekhbbc.aspx)。だからそれに基づいて、私は参考にすると思いますか? –

+0

[C++でデフォルトのcatch throw文を値渡しまたは参照渡しする可能性があります](http://stackoverflow.com/questions/9562053/do-the-default-catch-throw-statements-in-c-pass- –

答えて

9

標準は言う:なしオペランドと

スロー-expressionが現在処理の例外を再スロー。例外は既存の一時的なものと再アクティブ化されます。新しい一時例外オブジェクトは作成されません。

- ISO/IEC 14882:2011セクション15.1。 8

つまり、元の例外オブジェクトを使用した例外伝播を続行するだけです。私はこれがあなたが「参考文献」で意味するものに類似していると思います。

+1

草案§5.17/ 3で位置が変更されましたが、言い回しと意図は残ります。 [リンクはこちら](http://eel.is/c++draft/expr.throw#3)そして、この引用* "ハンドラが再スローされて終了する場合、コントロールは同じ例外のために別のハンドラに渡されます" * [here](http://eel.is/c++draft/except#except.throw-4 )。 – Niall

関連する問題