如果(条件)在C ++中尝试{...}合法吗?

时间:2016-03-14 10:54:02

标签: c++ exception try-catch language-lawyer

例如:

if(download.completed)
ibHeightOutlet.constant = imageView.frame.size.height;
else
ibHeightOutlet.constant = initialImageViewHeght.frame.size.height;

换句话说,在if条件之后立即放置try-block 是否合法?

4 个答案:

答案 0 :(得分:77)

try块的语法(在C ++中是statement)是

try compound-statement handler-sequence

if的语法是:

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

其中:

  

statement-true - 任何声明(通常是复合声明),其中   如果条件评估为真,则执行statement-false - 任何   语句(通常是复合语句),如果是条件则执行   评估为假

是的,您的代码是C++中的合法代码。

在您的情况下,

statement_truetry块。

在合法性方面,它类似于:

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

但是您的代码不易读取,并且在添加else时可能成为某些C ++陷阱的牺牲品。因此,建议您在{...}之后添加明确的if

答案 1 :(得分:40)

  

将if-block放在if条件之后是否合法?

这是合法的。你的代码与(和写作更好)相同:

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

因此,如果条件为false,则不会执行try-catch块。如果这是你所期望的,那很好。

答案 2 :(得分:22)

是。 if的大括号是可选的。想象一下,{}周围有try { .. } catch { .. }

您可能会感兴趣的是,当您撰写if / else if / else时会发生这种情况; C ++实际上没有else if ...所以这个:

if (A) {

}
else if (B) {

}

实际上被解析为:

if (A) {

}
else
   if (B) {

   }

这是:

if (A) {

}
else {
   if (B) {

   }
}

答案 3 :(得分:9)

它的结构良好。根据{{​​3}}, try-block 语句,而{em>语句if (…)进行var angularApp = angular.module('myModule', [ 'angular-cache', 'ui.bootstrap', 'ngRoute', 'ScheduleModule' ]); 3}}