私は簡単な進路の1つでこれを拾い、redditしました:
http://www.smallshire.org.uk/sufficientlysmall/2009/07/31/in-c-throw-is-an-expression/
基本的に、著者はC ++では次のように指摘しています。
throw "error"
式です。これは実際には、C ++標準では、本文と文法の両方でかなり明確に記述されています。しかし、(少なくとも私にとって)明確ではないのは、表現のタイプは何ですか?「void
」と思ったのですが、g ++ 4.4.0とコモーで少し実験すると、次のコードが生成されました。
void f() {
}
struct S {};
int main() {
int x = 1;
const char * p1 = x == 1 ? "foo" : throw S(); // 1
const char * p2 = x == 1 ? "foo" : f(); // 2
}
コンパイラーは、// 1には問題がありませんでしたが、条件演算子の型が異なるため、// 2に障害が発生しています。したがって、式の型はthrow
無効であるようには見えません。
それは何ですか?
答える場合は、基準からの引用を含めてステートメントをバックアップしてください。
これは、条件式演算子がスロー式を処理する方法ほど、スロー式のタイプについてはそれほど多くないことがわかりました。返信してくれたすべての人、特にDavid Thornleyに感謝します。