Например:
if (true) try
{
// works as expected with both true and false, but is it legal?
}
catch (...)
{
// ...
}
Другими словами, правильно ли положить try-блок сразу после условия if?
Например:
if (true) try
{
// works as expected with both true and false, but is it legal?
}
catch (...)
{
// ...
}
Другими словами, правильно ли положить try-блок сразу после условия if?
Синтаксис блока try (который является statement в С++)
try compound-statement handler-sequence
И синтаксисом if является:
attr(optional) if ( condition ) statement_true
attr(optional) if ( condition ) statement_true else statement_false
где:
statement-true- любое утверждение (часто составное утверждение), которое выполняется, если условие оценивается как truestatement-false- любое (часто составной оператор), который выполняется, если условие оценивает значение false
Итак, ваш код является юридическим кодом в C++.
statement_true в вашем случае это блок try.
В законности он похож на:
if (condition) for(...) {
...
}
Но ваш код не очень читабельен и может стать жертвой некоторых подводных камней С++ при добавлении else. Таким образом, желательно добавить явный {...} после if в вашем случае.
Можно ли поставить блок try сразу после условия if?
Это законно, ваш код такой же, как (и лучше писать как):
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; На С++ фактически нет else if & hellip; так что:
if (A) {
}
else if (B) {
}
фактически анализируется следующим образом:
if (A) {
}
else
if (B) {
}
что и есть:
if (A) {
}
else {
if (B) {
}
}
Он хорошо сформировался. try-blocks - это утверждения в соответствии с [stmt.stmt]/1, а операторы следуют if (…) согласно [stmt.select]/1.