sentencia - switch c++
Es si(condición) intenta{...} legal en C++? (4)
¿Es legal poner el try-block justo después de la condición if?
Es legal Su código es el mismo (y mejor para escribir como):
if (true) {
try
{
// works as expected with both true and false, but is it legal?
}
catch (...)
{
// ...
}
}
Entonces, si la condición es false , el bloque try-catch no se ejecutará. Si esto es lo que esperas, está bien.
Por ejemplo:
if (true) try
{
// works as expected with both true and false, but is it legal?
}
catch (...)
{
// ...
}
En otras palabras, ¿es legal colocar el try-block justo después de la condición if ?
Está bien formado. try-block s son declaraciones s según [stmt.stmt]/1 , y los enunciados s siguen if (…) según [stmt.select]/1 .
La sintaxis de un bloque try (que es una statement en C ++) es
try compound-statement handler-sequence
Y la sintaxis de if es:
attr(optional) if ( condition ) statement_true
attr(optional) if ( condition ) statement_true else statement_false
dónde:
statement-true: cualquier instrucción (a menudo una declaración compuesta), que se ejecuta si la condición se evalúa como verdadera
statement-false- cualquier instrucción (a menudo una declaración compuesta), que se ejecuta si la condición se evalúa como falsa
Entonces sí, su código es código legal en C++ .
statement_true en tu caso es un bloque try .
En legalidad, es similar a:
if (condition) for(...) {
...
}
Pero su código no es muy legible y puede ser víctima de algunas trampas de C ++ cuando se agrega otro. Por lo tanto, es aconsejable agregar {...} explícito después if en su caso.
Sí. Las llaves de un if son opcionales. Imagine que tiene {} alrededor del try { .. } catch { .. } .
Le puede interesar saber que esto es lo que sucede cuando escribe if / else if / else ; C ++ en realidad no tiene else if ... así que esto:
if (A) {
}
else if (B) {
}
en realidad se analiza como esto:
if (A) {
}
else
if (B) {
}
cual es este:
if (A) {
}
else {
if (B) {
}
}