2016-03-14 10 views
44

if(condition)はC++で{...}合法ですか?たとえば

if (true) try 
{ 
    // works as expected with both true and false, but is it legal? 
} 
catch (...) 
{ 
    // ... 
} 

言い換えれば、それは正しいかの条件後のtryブロックを置くことは合法ですか?

+0

はい[それは違法です]。 tryブロックは 'if'ステートメント内になければなりません。しかし、tryを使って条件をテストするだけではどうですか? – franklin

+58

@franklinいいえ、違法ではありません。 – Columbo

+5

正解、違法ではありません。 true句の括弧はCおよびC++ではオプションで、if()が真句に続くものとみなされ、try節の後に続くcatch節がそのtry節に関連付けられます。しかし、多くの企業のスタイルガイドは、あなたが大括弧を使わないためにあなたをつかむでしょう。 –

答えて

77

(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の後に明示的に{...}を追加することをお勧めします。

+0

文法はOPによって提示されたコードとは無関係だと思いますか? –

+46

@AngelusMortis文法ではない場合、コードの一部が合法であるかどうかを決定するのは他に何ですか? –

+6

@AngelusMortis私はあなたが間違っていることを証明しようとしていませんでした。私は前向きに話し合い、どのようにしてこの答えをより有益なものにすることができるかというあなたの見解を理解するように私の意見を述べます。 –

40

if条件の直後にtryブロックを置くのは合法でしょうか?

それはあなたのコードが(のように書くことは、より良い)と同じであり、法的です:条件はfalseある

if (true) { 
    try 
    { 
     // works as expected with both true and false, but is it legal? 
    } 
    catch (...) 
    { 
     // ... 
    } 
} 

そうならば、try-catchブロックは実行されません。これがあなたが期待しているものなら、大丈夫です。

+13

これは読みやすくなります – Liam

+4

最も外側の '{'と '}'の中カッコを削除すると、同値が自明になります。 –

+1

私は同意します。中括弧を削除するだけで、元の質問の 'if'文は、正確にはスペースを数えずに同じであることがわかります。中括弧がないと、あなたの書式は、 'if'ステートメントの直後に_try-catch_ブロックを置くことに「魔法」がないことを示しています。 –

9

うまく形成されています。 のtryブロック sが声明[stmt.stmt]/1あたりとして秒であり、声明 Sは以下の通りですif (…)[stmt.select]/1あたりとして。

21

はい。 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) { 

    } 
} 
+2

落雷:p –

+1

'C++は実際にelse ifを持っていません' Whoooa –

+0

@Derek朕會功夫いくつかの言語で見られるような間違った 'elseif'トークンはありません。 'else if'構造の' if'部分はまったく新しい文であり、これはそれをそれほど認識しないコードでいくつかの面白い誤解を引き起こします。 – Corey

関連する問題