私はこれを reddit への私の短い進出の 1 つで拾いました:
http://www.smallshire.org.uk/sufficientlysmall/2009/07/31/in-c-throw-is-an-expression/
基本的に、著者は C++ で次のように指摘しています。
throw "error"
は表現です。これは実際には、C++ 標準の本文と文法の両方でかなり明確に記述されています。しかし、(少なくとも私には)明確ではないのは、式のタイプは何ですか?私は " " と推測void
しましたが、g++ 4.4.0 と Comeau を少し試してみると、次のコードが得られました。
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
void ではないようです。
それで、それは何ですか?
回答する場合は、基準からの引用を使用してステートメントをバックアップしてください。
これは、throw 式の型ではなく、条件演算子が throw 式をどのように処理するかということであることが判明しました。これについては、今日までまったく知りませんでした。返信してくれたすべての人、特に David Thornley に感謝します。