:if(condition)はC++で{...}合法ですか?たとえば
if (true) try
{
// works as expected with both true and false, but is it legal?
}
catch (...)
{
// ...
}
言い換えれば、それは正しいかの条件後のtryブロックを置くことは合法ですか?
:if(condition)はC++で{...}合法ですか?たとえば
if (true) try
{
// works as expected with both true and false, but is it legal?
}
catch (...)
{
// ...
}
言い換えれば、それは正しいかの条件後のtryブロックを置くことは合法ですか?
(C++である)try
ブロックの構文は
try compound-statement handler-sequence
されif
の構文は次のとおりである:
attr(optional) if (condition) statement_true
attr(optional) if (condition) statement_true else statement_false
ここ
statement-true
- 任意のステートメント(多くの場合、複合ステートメント)。条件 はそうです、あなたのコードがC++
で法的なコードである偽
に評価された場合に実行される任意の 声明(多くの場合、複合文を)、 - 条件が真statement-false
と評価された場合0が実行されます。
statement_true
は、try
ブロックです。合法性に
、それは次のようになります。あなたのコードは非常に読みやすいものではなく、else
が追加されたときに、いくつかのC++落とし穴の犠牲にすることができ
if (condition) for(...) {
...
}
しかし。あなたのケースではif
の後に明示的に{...}
を追加することをお勧めします。
文法はOPによって提示されたコードとは無関係だと思いますか? –
@AngelusMortis文法ではない場合、コードの一部が合法であるかどうかを決定するのは他に何ですか? –
@AngelusMortis私はあなたが間違っていることを証明しようとしていませんでした。私は前向きに話し合い、どのようにしてこの答えをより有益なものにすることができるかというあなたの見解を理解するように私の意見を述べます。 –
if条件の直後にtryブロックを置くのは合法でしょうか?
それはあなたのコードが(のように書くことは、より良い)と同じであり、法的です:条件はfalse
ある
if (true) {
try
{
// works as expected with both true and false, but is it legal?
}
catch (...)
{
// ...
}
}
そうならば、try-catch
ブロックは実行されません。これがあなたが期待しているものなら、大丈夫です。
これは読みやすくなります – Liam
最も外側の '{'と '}'の中カッコを削除すると、同値が自明になります。 –
私は同意します。中括弧を削除するだけで、元の質問の 'if'文は、正確にはスペースを数えずに同じであることがわかります。中括弧がないと、あなたの書式は、 'if'ステートメントの直後に_try-catch_ブロックを置くことに「魔法」がないことを示しています。 –
うまく形成されています。 のtryブロック sが声明[stmt.stmt]/1あたりとして秒であり、声明 Sは以下の通りですif (…)
[stmt.select]/1あたりとして。
はい。 if
の中カッコはオプションです。 {}
がtry { .. } catch { .. }
の周りにあるとします。
これは、あなたがif
/else if
/else
と書くときに起こることです。 C++は実際にはelse if
&hellipを持っていません。したがって、この:
if (A) {
}
else if (B) {
}
が実際にこのように解析される:
if (A) {
}
else
if (B) {
}
これである:
if (A) {
}
else {
if (B) {
}
}
落雷:p –
'C++は実際にelse ifを持っていません' Whoooa –
@Derek朕會功夫いくつかの言語で見られるような間違った 'elseif'トークンはありません。 'else if'構造の' if'部分はまったく新しい文であり、これはそれをそれほど認識しないコードでいくつかの面白い誤解を引き起こします。 – Corey
はい[それは違法です]。 tryブロックは 'if'ステートメント内になければなりません。しかし、tryを使って条件をテストするだけではどうですか? – franklin
@franklinいいえ、違法ではありません。 – Columbo
正解、違法ではありません。 true句の括弧はCおよびC++ではオプションで、if()が真句に続くものとみなされ、try節の後に続くcatch節がそのtry節に関連付けられます。しかし、多くの企業のスタイルガイドは、あなたが大括弧を使わないためにあなたをつかむでしょう。 –