私はのredditに私の簡単な進出の一つでこれを拾った:C++では、throwが式の場合、その型は何ですか?
throw "error"
式です:
http://www.smallshire.org.uk/sufficientlysmall/2009/07/31/in-c-throw-is-an-expression/
基本的に、著者はC++であることを指摘しています。これは、実際には、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にbarfed条件付き演算子は異なります。したがって、式throw
のタイプは無効ではないようです。
だから何ですか?
回答があった場合は、標準からの引用文をバックアップしてください。
これはスロー表現とどのように条件演算子のお得な情報などthrow式のタイプについてはあまりでないことが判明 - 私は確かに が今日前に約知らなかった何か。回答したすべての人に感謝しますが、特にDavid Thornleyに感謝します。
+1恐ろしい質問。そしてそれをテストする巧妙な方法。 –
このリンクは、型がコンパイラによって必要とされるものであると判断されることをかなり明確にしているようです。 – Draemon
リンクされた記事は、私がそれを見てから更新されていると思いますが、実際はそうであると確信しています。しかし、私は標準でそれを見つけることができません。 –