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) {
}
}