例えば:
if (true) try
{
// works as expected with both true and false, but is it legal?
}
catch (...)
{
// ...
}
言い換えれば、try-block if条件の直後を置くことは合法ですか?
try
ブロック(C++では statement )の構文は次のとおりです。
try compound-statement handler-sequence
if
の構文は次のとおりです。
attr(optional) if ( condition ) statement_true
attr(optional) if ( condition ) statement_true else statement_false
どこ:
statement-true
-条件がtrueと評価された場合に実行される任意のステートメント(多くの場合、複合ステートメント)statement-false
-条件がfalseと評価された場合に実行される任意のステートメント(多くの場合、複合ステートメント)
はい、あなたのコードはC++
の正当なコードです。
statement_true
は、try
ブロックです。
合法的には、次のようになります。
if (condition) for(...) {
...
}
しかし、コードは非常に読みにくく、else
が追加されたときにC++の落とし穴の犠牲になる可能性があります。したがって、明示的に{...}
をif
の後に追加することをお勧めします。
if条件の直後にtryブロックを置くことは合法ですか?
合法です。あなたのコードは次と同じです(そして書く方が良いです):
if (true) {
try
{
// works as expected with both true and false, but is it legal?
}
catch (...)
{
// ...
}
}
したがって、条件がfalse
の場合、try-catch
ブロックは実行されません。これがあなたが期待するものであれば、それは大丈夫です。
はい。 if
の中括弧はオプションです。 {}
の周りにtry { .. } catch { .. }
があると想像してください。
if
/else if
/else
;を記述すると、これが起こることを知っておくと興味深いかもしれません。 C++には実際にはelse if
がありません...…
if (A) {
}
else if (B) {
}
実際にこれとして解析されます:
if (A) {
}
else
if (B) {
}
これは:
if (A) {
}
else {
if (B) {
}
}
整形式です。 try-blocksはstatements [ stmt.stmt]/1 、およびstatementsは、 [stmt.select]に従ってif (…)
の後に続きます/ 1 。