43 votes

Est-ce que si (condition) essaie {...} légal en C ++?

Par exemple:

 if (true) try
{
    // works as expected with both true and false, but is it legal?
}
catch (...)
{
    // ...
}
 

En d'autres termes, est-il légal de placer le bloc try juste après la condition if ?

77voto

Mohit Jain Points 6202

La syntaxe d'un try bloc (qui est une instruction en C++) est

try compound-statement handler-sequence

Et la syntaxe de l' if est:

attr(optional) if ( condition ) statement_true      
attr(optional) if ( condition ) statement_true else statement_false     

Donc oui, votre code est un code juridique en C++.

statement_true dans votre cas est un try bloc.

Dans la légalité, il est semblable à:

if (condition) for(...) {
    ...
}

Mais ton code n'est pas très lisible et peut être la victime de certains C++ écueils lors de l' else est ajouté. Donc, il est conseillé d'ajouter explicite {...} après if dans votre cas.

40voto

songyuanyao Points 2265

est-il légal de mettre le bloc d'essai juste après la condition if?

C'est légal, votre code est le même que (et il vaut mieux écrire comme):

 if (true) {
    try
    {
        // works as expected with both true and false, but is it legal?
    }
    catch (...)
    {
        // ...
    }
}
 

Donc, si la condition est false le bloc try-catch ne sera pas exécuté. Si c'est ce que vous attendez, c'est bien.

22voto

Oui. Les accolades d'un if sont facultatives. Imaginez que vous avez {} autour du try { .. } catch { .. } .

Cela peut vous intéresser de savoir que c'est ce qui se passe lorsque vous écrivez if - else if - else ; C ++ n’a pas réellement else if … donc ceci:

 if (A) {

}
else if (B) {

}
 

est en fait analysé comme ceci:

 if (A) {

}
else
   if (B) {

   }
 

qui est ceci:

 if (A) {

}
else {
   if (B) {

   }
}
 

9voto

Columbo Points 11661

C'est bien formé. Les blocs try-block sont des instructions selon [stmt.stmt] / 1 et les instructions s suivent if (…) selon [stmt.select] / 1 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X