2016-04-20 10 views
0

:私の知る限りではなぜcatchブロックの...(3点)が存在するのですか?私たちにできるのtry catch文で

try{} 
catch(...){} 

...は任意の例外を意味します。

私の質問はです:なぜ、C++標準がの代わりにこの方法を(...)に選んだのですか?しばらく、例えば、関数であなたがちょうど()を置くのパラメータを必要としない場合:

void foo(); 

は、それがどのような方法で可変長引数テンプレートに関連していますか?

+2

によって捕捉された例外を再スローし、真実ではありません任意の引数を意味しますが、引数を持たないパラメータリストを意味します。 – 101010

+2

[書籍を読む](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) –

+0

http://stackoverflow.com/questions/315948/c-catching-all-exceptionsの複製はありません。少なくとも質問を読んでください –

答えて

1

は、その特定のキャッチブロックに何も渡されなかったことを強く暗示します。

しかし、それはCで、 `()`手段 `(空)とは異なり、`それはない、

catch(...){ 
    throw; 
} 

が実際にC++で...

+0

nice point ..内部的に例外は隠し変数によってキャッシュされる –

3

バリデーショナルテンプレートとはまったく関係がありません。これはC++ 11に付属していたもので、catch (...)はほぼ最初(約20年前)から存在していたからです。

なぜ()の代わりに(...)を選んだのですか?Bjarne Stroustrupに聞いてみることはできますが、ほとんど重要ではないようです。この機能は、とにかく頻繁に使用されるものではありません。 C++では、(...)は通常、「任意の数の型のもの」のようなものを意味しますが、()は通常「何もありません」を意味します。あなたの見解に応じて、これらのいずれかが「すべての例外をキャッチ」するのがより好ましいかもしれません。

+0

何か堅牢なものが必要な場合は、本当によく使われます。 – Caduchon

関連する問題