如果(条件)在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 (...) { // ... } } 

所以如果条件为falsetry-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 。