如果(条件)在C ++中尝试{…}是否合法?
例如:
if (true) try { // works as expected with both true and false, but is it legal? } catch (...) { // ... }
换句话说, 在if条件之后放置try-block是否合法?
try
块的语法(在C ++中是一个语句 )是
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-block是否合法?
这是合法的,你的代码是相同的(最好写作):
if (true) { try { // works as expected with both true and false, but is it legal? } catch (...) { // ... } }
所以如果条件为false
, try-catch
块将不会被执行。 如果这是你所期望的,那很好。
是。 if
的括号是可选的。 想象一下你在try { .. } catch { .. }
周围try { .. } catch { .. }
。
你可能会感兴趣的是,当你写if
/ else if
/ else
时,会发生这种情况; C ++实际上没有else if
…如此:
if (A) { } else if (B) { }
实际上是这样parsing的:
if (A) { } else if (B) { }
这是:
if (A) { } else { if (B) { } }
它是格式良好的。 根据[stmt.stmt] / 1 , try-block s是语句 s,并且语句 s在if (…)
跟[stmt.select] / 1 。